PHP json_decode无法使用有效的json数据

时间:2015-04-28 18:44:56

标签: php json

在使用PHP json_decode函数解析下面的JSON数据时,它返回null,因为键名没有双引号。你能帮我解决这个问题吗? [例如:Instanceid键名,LineageId键名未嵌入双引号]

JSON数据:

[
{
InstanceId: 1,
LineageId: 1,
ModifiedDate: "/Date(1225229100000+0000)/",
Name: "HP StorageWorks 1000 Modular Smart Array Active/Active",
Status: "Published",
Version: 1
},
{
InstanceId: 3897,
LineageId: 1,
ModifiedDate: "/Date(1278697020000+0000)/",
Name: "HP StorageWorks 1000 Modular Smart Array Active/Active",
Status: "Published",
Version: 2
},
]

2 个答案:

答案 0 :(得分:2)

这不解析的原因是因为它只是无效的JSON。为了使其有效,成员名称必须是显示in the JSON RFC的字符串,并且您需要修剪数组中的尾随逗号。

[
  {
    "InstanceId": 1,
    "LineageId": 1,
    "ModifiedDate": "/Date(1225229100000+0000)/",
    "Name": "HP StorageWorks 1000 Modular Smart Array Active/Active",
    "Status": "Published",
    "Version": 1
  },
  {
    "InstanceId": 3897,
    "LineageId": 1,
    "ModifiedDate": "/Date(1278697020000+0000)/",
    "Name": "HP StorageWorks 1000 Modular Smart Array Active/Active",
    "Status": "Published",
    "Version": 2
  }
]

一些帮助JSON的好资源:
Linter:http://jsonlint.com/
RFC:http://rfc7159.net/rfc7159
JSON示例:http://json.org/example

答案 1 :(得分:1)

我已经多次发生了类似的事情。

幸运的是,有一个函数可以调用AFTER json_decode json_last_error_msg(),它可以告诉你更多关于出错的地方。

但是,我会告诉你一些我认为错误的事情:

  • 在JSON中,集合(对象{}或数组[])中的 last 项目没有尾随逗号。
  • 将文档封装在{}而不是[]中通常是个好主意。我已经看到PHP的json_decode做了奇怪的事情。