【问题标题】:Json parse error on JSONLintJSONLint上的Json解析错误
【发布时间】:2014-12-08 01:11:32
【问题描述】:

我有这个 JSON 输出:

 {
  "title": "test1",
  "status": "private",
  "markers": "\"[{\"k\":48.28319289548349,\"B\":1.494140625},{\"k\":44.024421519659334,\"B\":20.302734375},{\"k\":47.517200697839414,\"B\":40.517578125},{\"k\":53.9560855309879,\"B\":23.73046875},{\"k\":49.66762782262194,\"B\":3.251953125}]\""
 }

 {
  "title": "test2",
  "status": "public",
  "markers": "\"[{\"k\":48.574789910928864,\"B\":10.546875},{\"k\":43.19716728250127,\"B\":12.48046875}]\""
 }

在 JSONLint 上我收到此错误:

 Parse error on line 5:
 ...":3.251953125}]\""}{    "title": "test
 ----------------------^
 Expecting 'EOF', '}', ',', ']'

这是获取 JSON 对象的 PHP 代码:

 if ($bdd = mysqli_connect('localhost', '', '', _BDD_NAME_)) {
    $sql = 'SELECT * FROM `trip`';
    $result = mysqli_query($bdd, $sql);

    if ($result) {
        while  ($row = $result->fetch_assoc()) {
            echo json_encode(array('title'   => stripslashes($row['title']),
                                   'status'  => stripslashes($row['status']),
                                   'markers' => stripslashes($row['markers'])));
        }
    }
    else {
        echo json_encode(array('status' => 'failure'));
    }
}

 if ($bdd) {
    mysqli_close($bdd);
}

谁能帮我确定这个 JSON 对象的错误在哪里?

【问题讨论】:

  • 这不是有效的 JSON。这是两个 JSON 对象,而不是一个。
  • @HoboSapiens 是的,但是我从 MySQL 查询中获取所有 JSON 对象,女巫给了我所有这些输出,我该如何处理多个对象?
  • @Katcha 将它们放入一个数组中。我觉得这个问题实际上是关于你如何从 MySQL 构建 JSON 响应。将您的服务器端代码添加到问题中,我们可以指出您哪里出错了
  • @Phil 你是对的,你现在可以看到 PHP 代码了。
  • 感觉不久前有一个非常相似的问题。让我找到它

标签: javascript json parsing object


【解决方案1】:

由于您的 JSON 中有多个对象,因此您必须将它们包装在一个数组字面量中。您还忘记了 JSON 对象之间的逗号:

[
     {
      "title": "test1",
      "status": "private",
      "markers": "\"[{\"k\":48.28319289548349,\"B\":1.494140625},{\"k\":44.024421519659334,\"B\":20.302734375},{\"k\":47.517200697839414,\"B\":40.517578125},{\"k\":53.9560855309879,\"B\":23.73046875},{\"k\":49.66762782262194,\"B\":3.251953125}]\""
     },
     {
      "title": "test2",
      "status": "public",
      "markers": "\"[{\"k\":48.574789910928864,\"B\":10.546875},{\"k\":43.19716728250127,\"B\":12.48046875}]\""
     }
]

【讨论】:

  • 即使我有方括号仍然是同样的错误,你可以检查 JSONLint。
  • 嗯,JSONLint 报告它对我有效。
  • Katcha 两个对象之间加逗号了吗?
  • 现在是的,它是有效的,我认为这是@aug 的编辑!谢谢!
  • 是的,这个答案指出了问题,但它没有解决解决方案。 JSON 在服务器端生成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多