【发布时间】:2018-01-14 06:36:13
【问题描述】:
这里真正的问题不是未定义的属性,但我无法找出原因。它是一个 PHP 挂起的大 JSON 字符串,它包含一个文件列表、子目录列表等以及一个名为 Mt 的 Object 中的一些额外信息。这个 Mt 有一些属性,一些字符串,对象和两个数组,它们都是未定义!
Mt JSON 字符串:
{
"Mt": {
"About": "Dublin Core Metadata Based, project DC+, version 1.0",
"Name": "AlgunsEBooks",
"Version": "1.0",
"FileExtension": "mt",
"Fields": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"IndexedFields": [1, 2],
"FieldKey": "1",
"StringEncoding": {
"Text": "URI",
"Code": "none",
"Date": "none",
"RasterImage": "Base64",
"VectorImage": "Base64"
},
"DescriptionFieldsBasic": {
"previousFileName": "String",
"previousFileTime": "String",
"icone": "String-RasterImage",
"orelha": "String"
},
"DescriptionFieldsExtras": {
"obs": "String"
},
"DescriptionType": "Object",
"IncludedFilesMasc": "{base}.{ext}",
"IncludedFilesFields": {
"base": "{base}",
"ext": "pdf|epub|jpg"
}
}
}
我确实通过 jsonlint.com 对其进行了验证。通过使用 JSON.parse 它将完美地变成一个对象。但是,当我在对 PHP (执行文件列表并生成 JSON)的请求后收到相同的字符串时,将无法正常工作。 “Fields”和“IndexedFields”属性均未定义。
从 xmlhttprequest 返回的字符串可能包含一些在这些特定点使 JSON 无效的字符,但是当我通过 console.log 打印字符串时,我得到的字符串是有效的。我试图复制由 console.log 打印的字符串并在单独的测试代码中执行 JSON.parse 并且它可以工作,因此打印的字符串不是 var 的所有内容。 我还尝试将 PHP 答案保存到文件中,结果又是一个有效的字符串,问题接缝是 xmlhttprequest 事件在加载时返回的字符串。错误肯定在 var 内部,但我看不到。
有什么想法吗?
【问题讨论】:
-
使用 try catch 来验证 JSON 是否完整。另外,我会建议您向 PHP 发送一些值,这些值可以帮助您识别您构建的 JSON 的任何属性的值何时为 null 或填充 0 或任何 bool 值。
-
JSON 不会生成要捕获的错误,只是将数组解析为未定义,但无论如何我都会尝试。另外,传代码看会不会报错的想法也是个好主意,我也试试。
-
如何检查
Fields和IndexedFields是否为undefined? -
当我通过 console.log 打印对象时,这些属性是未定义的。我执行此过程是为了与单独的测试代码结果进行比较。
标签: javascript json string