0

我正在尝试解析这个 json '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n wajghjk \"},{\"order\":\"2\"},{\"skill\":\"\\n aswedrty \"},{\"order\":\"3\"},{\"skill\":\"\\n skill1 \"},{\"order\":\"4\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"5\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"6\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"7\"},{\"skill\":\"\\n Autotransfusionist \"},{\"order\":\"8\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"9\"},{\"skill\":\"\\n Autotransfusionist \"}]"}' 。使用代码

<?php
$json = '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n                        wajghjk                    \"},{\"order\":\"2\"},{\"skill\":\"\\n                        aswedrty                    \"},{\"order\":\"3\"},{\"skill\":\"\\n                        skill1                    \"},{\"order\":\"4\"},{\"skill\":\"\\n                        wasedjk                    \"},{\"order\":\"5\"},{\"skill\":\"\\n                        Feldsher                    \"},{\"order\":\"6\"},{\"skill\":\"\\n                        wasedjk                    \"},{\"order\":\"7\"},{\"skill\":\"\\n                        Autotransfusionist                    \"},{\"order\":\"8\"},{\"skill\":\"\\n                        Feldsher                    \"},{\"order\":\"9\"},{\"skill\":\"\\n                        Autotransfusionist                    \"}]"}';

$decode = json_decode($json, true);
$a=array();
echo '<br/>';
foreach($decode['options'] as $a)
{
    echo $a['order'];echo '<br/>';
     echo $a['skill'];echo '<br/>';
}
?>

但它显示错误并且无法解析。有没有更好的方法从这个 json 获取 order 和 Skill 的值?

4

4 回答 4

3

那不是 JSON。您正在转义太多双引号。

于 2013-07-23T12:18:56.807 回答
1

json 字符串有两个问题。

  1. 您在单引号字符串中转义双引号。但是单引号字符串只有一个转义序列,那就是\'。检查这篇文章
  2. 你这里有问题:'{"options":"[{...}]"}'. 您将 javascript [array] 用引号括起来,这将其变成了一个字符串。

正确的 json 应该如下所示:

{"options":[{"order":"1"},{"skill":"\\n wajghjk "},{"order":"2"},{"skill":"\\n aswedrty "},{"order":"3"},{"skill":"\\n skill1 "},{"order":"4"},{"skill":"\\n wasedjk "},{"order":"5"},{"skill":"\\n Feldsher "},{"order":"6"},{"skill":"\\n wasedjk "},{"order":"7"},{"skill":"\\n Autotransfusionist "},{"order":"8"},{"skill":"\\n Feldsher "},{"order":"9"},{"skill":"\\n Autotransfusionist "}]}

eval.in 演示

于 2013-07-23T12:32:16.587 回答
1

它显示错误并且无法解析。

PHP 在调试 json 方面相当薄弱。你所能做的就是

$json_errors = array(
    "",
    "The maximum stack depth has been exceeded",
    "Invalid or malformed JSON",
    "Control character error, possibly incorrectly encoded",
    "Syntax error",
    "Malformed UTF-8 characters, possibly incorrectly encoded",
);

$decode = json_decode($json, true);
if ($error = json_last_error())
{
    trigger_error($json_errors[$error]);
}

但是,为了获取值,您必须有一个有效的 json 字符串,而不仅仅是由一些引号和斜杠组成的任意字符串。

当然,您永远不应该手动创建 json 字符串。

于 2013-07-23T12:33:28.980 回答
1

您正在转义双引号,\当字符串由单引号分隔时,双引号将作为文字字符出现。

要么在 json 字符串上运行stripslashes,要么首先避免转义。

于 2013-07-23T12:19:08.490 回答