質問編集履歴
2
ソースコードの改変
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,26 +5,34 @@
|
|
5
5
|
なぜこんな作りにしたかも今となってはわかりませんが・・・
|
6
6
|
|
7
7
|
```
|
8
|
-
|
8
|
+
<?php
|
9
9
|
|
10
|
+
$data = array("data" => array('ああああ"あ', 'いいい'));
|
11
|
+
|
10
|
-
$json = json_data($data);
|
12
|
+
$json = json::json_data($data);
|
11
13
|
// var_dump($json)とすると、ダブルクォートがエスケープされていない。関数内ではエスケープされているが
|
12
14
|
// この時点でエスケープが外れる要因がわからず
|
13
15
|
$decode = json_decode($json, true);
|
14
16
|
|
15
|
-
|
17
|
+
var_dump($decode);
|
16
|
-
$from = array("\"","\'","\n",",");
|
17
|
-
$to = array("\\"", "\\'", "\n", "\,");
|
18
18
|
|
19
|
+
class json
|
20
|
+
{
|
21
|
+
public static function json_data($s){
|
22
|
+
$from = array("\"","\'","\n",",");
|
23
|
+
$to = array("\\"", "\\'", "\n", "\,");
|
24
|
+
|
25
|
+
$a = array();
|
19
|
-
|
26
|
+
if (sizeof($s) == 0) {
|
20
|
-
|
27
|
+
return '[]';
|
21
|
-
|
28
|
+
} elseif (isset($s[0])) {
|
22
|
-
|
29
|
+
foreach($s as $p) array_push($a, (is_string($p)? '"'.str_replace($from, $to, $p).'"': self::json_data($p)));
|
23
|
-
|
30
|
+
// この時点で、ダブルクォーとはエスケープされることはデバックで確認済み
|
24
|
-
|
31
|
+
return '['.implode(',', $a).']';
|
25
|
-
|
32
|
+
} else {
|
26
|
-
|
33
|
+
foreach($s as $p => $q) array_push($a, "\"$p\":".self::json_data($q));
|
27
|
-
|
34
|
+
return '{'.implode(',', $a).'}';
|
35
|
+
}
|
28
36
|
}
|
29
37
|
}
|
30
38
|
```
|
1
json_data関数の引数の変数名及び構文チェックのサイトを追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
// この時点でエスケープが外れる要因がわからず
|
13
13
|
$decode = json_decode($json, true);
|
14
14
|
|
15
|
-
function json_data($
|
15
|
+
function json_data($s);
|
16
16
|
$from = array("\"","\'","\n",",");
|
17
17
|
$to = array("\\"", "\\'", "\n", "\,");
|
18
18
|
|
@@ -36,4 +36,5 @@
|
|
36
36
|
実際の作成されるjsonデータは、1000biteあり、デコードした際にどこがエラーになっているか調査するのも困難です。
|
37
37
|
|
38
38
|
なお、ブラウザに出力されたjsonデータを下記サイトにて構文チェックをしたところ、
|
39
|
-
やはりダブルクォートが原因でした。
|
39
|
+
やはりダブルクォートが原因でした。
|
40
|
+
https://lab.syncer.jp/Tool/JSON-Viewer/
|