teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソースコードの改変

2020/09/18 02:46

投稿

prr4e
prr4e

スコア73

title CHANGED
File without changes
body CHANGED
@@ -5,26 +5,34 @@
5
5
  なぜこんな作りにしたかも今となってはわかりませんが・・・
6
6
 
7
7
  ```
8
- $data = array("0" => array('ああああ"あ', 'いいい'));
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
- function json_data($s);
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
- if (sizeof($s) == 0) {
26
+ if (sizeof($s) == 0) {
20
- return '[]';
27
+ return '[]';
21
- } elseif (isset($s[0])) {
28
+ } elseif (isset($s[0])) {
22
- foreach($s as $p) array_push($a, (is_string($p)? '"'.str_replace($from, $to, $p).'"': $this->json_data($p)));
29
+ foreach($s as $p) array_push($a, (is_string($p)? '"'.str_replace($from, $to, $p).'"': self::json_data($p)));
23
- // この時点で、ダブルクォーとはエスケープされることはデバックで確認済み
30
+ // この時点で、ダブルクォーとはエスケープされることはデバックで確認済み
24
- return '['.implode(',', $a).']';
31
+ return '['.implode(',', $a).']';
25
- } else {
32
+ } else {
26
- foreach($s as $p => $q) array_push($a, "\"$p\":".$this->obj2json($q));
33
+ foreach($s as $p => $q) array_push($a, "\"$p\":".self::json_data($q));
27
- return '{'.implode(',', $a).'}';
34
+ return '{'.implode(',', $a).'}';
35
+ }
28
36
  }
29
37
  }
30
38
  ```

1

json_data関数の引数の変数名及び構文チェックのサイトを追記

2020/09/18 02:46

投稿

prr4e
prr4e

スコア73

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($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/