有谁能告诉我为什么这个JSON无效?
{ NetworkOrgID :8 {{'NetworkOrgName':'Network Org'},{'FacilityName':'ACN Clinic ID'},{'City':'ChangedFlag'},{'FacilityName':'ClinicName'},{'PhoneNumber':'Address 1'},{'FaxNumber':'City'},{'MedicalServiceCode':'State'},{'FacilitySpecialties':'Zip'}}}
通过我得到的验证器运行它:
Parse error on line 1:
{ 'NetworkOrgID': '8'{
-----^
Expecting 'STRING', '}'
答案 0 :(得分:3)
您的JSON有几个问题。首先,所有属性名称必须用双引号("
)包围:
{ Foo : "bar" } // Invalid
{ "Foo" : "bar" } // Valid
其次,字符串值必须用双引号("
)包围,而不是单引号('
)。
{ "Foo" : 'bar' } // Invalid
{ "Foo" : "bar" } // Valid
除此之外,您的JSON存在更严重的问题。我将重新格式化以便于阅读,并添加一些行号以便于讨论:
1 | {
2 | "NetworkOrgID": 8
3 | {
4 | { "NetworkOrgName": "Network Org" },
5 | { "FacilityName": "ACN Clinic ID" },
6 | { "City": "ChangedFlag" },
… | …
12 | }
13 | }
即使修复了引号,这种数据结构也没有任何意义。在JSON中,花括号表示一个对象。对象由名称/值对组成:
{ "Foo": 1,
"Bar": 2,
"Baz": 3
}
以上是一个包含三个属性名称"Foo"
,"Bar"
和"Baz"
的对象,其值为1
,2
和{{ 1}}分别。请注意,除了最后一个值之外的每个值后跟逗号(3
),除了最后一个。
在你的代码中,你有一个对象(从第1行开始),然后是第2行的一个名称/值对(,
)。到目前为止,非常好。但是在第3行你有另一个开口大括号("NetworkOrgID": 8
) - 但你不能在这里做到这一点。请记住,对象由名称/值对组成。如果没有为其提供属性名称,则不能将对象放在另一个对象中,例如:
{
接下来,在第4-11行,您有一系列以逗号分隔的对象。每个对象都有一个名称/值对。看起来你可能已经打算将它作为一个数组,它放在方括号中,而不是花括号:
{
"NetworkOrgID": 8,
"NestedObject": {
// ...
}
}
而且,正如我之前所说,如果它是名称/值对中的值,则只能将其放在另一个对象中。这是有效的JSON:
[
{ "NetworkOrgName": "Network Org" },
{ "FacilityName": "ACN Clinic ID" },
{ "City": "ChangedFlag" },
// ...
]
如果您要将此反序列化为JavaScript,例如: {
"NetworkOrgID": 8
"MyArray": [
{ "NetworkOrgName": "Network Org" },
{ "FacilityName": "ACN Clinic ID" },
{ "City": "ChangedFlag" },
// ...
]
}
,var obj = JSON.parse(json);
的值为obj.NetworkOrgID
,8
的值为对象数组,因此obj.MyArray
将是对象{{ 1}},obj.MyArray[0]
将是{ "NetworkOrgName": "Network Org" }
,依此类推。
显然,对于该属性,您应该为obj.MyArray[1]
提供一个更好的名称。
答案 1 :(得分:-1)
这是有效的:
{ "NetworkOrgID": 8,
"NetworkOrgName": "NetworkOrg",
"FacilityName": "ACNClinicID" .... }