【问题标题】:How to fix json_decode () debugging problem?如何修复 json_decode() 调试问题?
【发布时间】:2019-02-18 12:34:05
【问题描述】:

美好的一天。尝试从“脚本”标签解析文本并将其转换为“JSON”。 所以,$arSlider 变量完美转换为json,但是$arOffers 没有转换,而是输出了字符串。代码中有cmets。 我做错了什么?

样本值 $arOffers = {"1441":{"ARTIKUL":"01001","PROPS":[{"VALUE":"Клинок - Полированный","NAME":"Покрытие\\цвет клинка "},{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]},"1442":{"ARTIKUL":"01003","PROPS":[{"VALUE":"Клинок - Стоунвош черный","NAME":"Покрытие\\цвет клинка "},{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]}}

include('/inc/simple_html_dom.php');
$url = 'Already to nothing, the problem is solved!';

$html = file_get_html($url);
foreach ($html->find('script') as $el) {
    if (stristr($el->outertext, "arSlider") !== false) {
        $script = str_replace("'", '"', trim(stristr($el->outertext, "arSlider")));
        $script = explode("     arOffers = ", $script);
        $arSlider = str_replace("arSlider = ", "", $script[0]);
        $arSlider = str_replace(";", "", $arSlider);
        $arOffers = str_replace("; ", "", $script[1]);
        $arOffers = str_replace("</script>", "", $arOffers); //Add

        print_r(json_decode($arSlider));
        print_r(json_decode($arOffers));
        //It's working! )))
    }
}

更新

问题告诉我var_dump(json_encode($ arOffers)); 该行没有显示结束标签&lt;/script&gt; 添加了替换,它起作用了! )))

【问题讨论】:

  • $arOffers 的实际价值是多少?
  • 请告诉我们$arOffers 实际包含的内容。您也可以使用json_last_error_msg() 进行更多调试。
  • 实际包含
  • {"1441":{"ARTIKUL":"01001","PROPS":[{"VALUE":"Клинок - Полированный","NAME":"Покрытие\\цвет клинка"} ,{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]}," 1442":{"ARTIKUL":"01003","PROPS":[{"VALUE":"Клинок - Стоунвош черный","NAME":"Покрытие\\цвет клинка"},{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]}}
  • 请用内容而不是评论更新您的问题

标签: php parsing


【解决方案1】:

如果带有"Покрытие\\цвет клинка " 的输出是$arOffers 的字符串表示形式,那么问题出在"Покрытие\\цвет клинка"(该字符串中有两次)。

\ 是 PHP 和 json 中的转义字符。

不知道$arrOffers的内容是从哪里来的,但是试试:

$arOffers = str_replace('\\', '\\\\', $arOffers); 然后是 json_decode:

php > $a = '{"a": "Покрытие\\цвет клинка"}';
php > var_dump($a); // string(47) "{"a": "Покрытие\цвет клинка"}"
php > var_dump(json_decode($a)); // NULL
php > var_dump(json_last_error_msg()); // string(12) "Syntax error"                                                                                                              
php > $a = str_replace('\\', '\\\\', $a);
php > var_dump($a); // string(48) "{"a": "Покрытие\\цвет клинка"}"
php > var_dump(json_decode($a));
object(stdClass)#4 (1) {
  ["a"]=>
  string(38) "Покрытие\цвет клинка"
}
php > var_dump(json_last_error_msg()); // string(8) "No error"

请参阅此答案https://stackoverflow.com/a/32057601/5537425 了解更多信息。

【讨论】:

  • 不幸的是,对于变量的全部内容,这解决了问题。 ((($arOffers = {"1441":{"ARTIKUL":"01001","PROPS":[{"VALUE":"Клинок - Полированный","NAME":"Покрытие\\цвет клинка "},{ "VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]},"1442" :{"ARTIKUL":"01003","PROPS":[{"VALUE":"Клинок - Стоунвош черный","NAME":"Покрытие\\цвет клинка "},{"VALUE":"Рукоять - Эластрон" ,"NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]}}
  • Спасибо за var_dump ))))))))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 2019-01-12
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多