例如,我有一个名为 Stores.json 的 JSON 文件,其中包含许多数字,例如 1142、1234、1890 等,并且每个数字都有一个与其关联的地址。它看起来像这样,但有数千个对象:
{
"1142": {
"Name": "P. Sherman",
"Address": "42 Wallaby Way, Sydney",
}
}
我已经看过这个答案:https://stackoverflow.com/a/24378510 但我仍然对如何读取基于字符串的文件感到困惑,例如“1142”,因为如果行很多,我不知道该数字在哪一行。
我尝试过:
var mydata = JSON.parse(data**[this is Stores.json]**);
addr = mydata["1142"];
也许我只是混淆了 JavaScript 和 PHP? PHP 代码可以工作,但我想要 JavaScript 版本。
编辑:假设文件中有很多对象,我需要能够使用数字选择一个对象。基本上没有任何 JSON 是写在 Javascript 代码中的。
最佳答案
试试这个:
function getJsonObj(path, func)
{
var xhr = new XMLHttpRequest();
xhr.open('GET', path, true);
xhr.onload = function()
{
var jso = JSON.parse(this.response);
var key = Object.keys(jso)[0];
var obj = jso[key];
func(key,obj);
}
xhr.send(null);
}
getJsonObj('path/to/file.json', function(key, obj)
{
// do stuff
});
使用上面的内容,您不需要知道“数字”是什么,因为它假定它是响应 JSON 中的第一个对象。
该函数接受“回调”函数作为第二个参数,因此它是异步的(非阻塞);它返回“数字”(键)和数字的数据(obj)。
这也会处理“空白”,如果你逐行读取它,在将来处理另一个 json-data-output api 时,你的“数字”可能会在不同的行上。
<小时/>编辑:
如果上面的代码不能完全正常工作,请尝试用以下代码替换 xhr.onload
部分:
xhr.onreadystatechange = function()
{
if ((xhr.readyState == 4) && (xhr.status == 200))
{
// the rest here
}
}
<小时/>
更新
如果您不知道文件中到底有什么内容,并且只需要过滤掉 JSON 部分,那么您可以执行以下操作:
// ...
var txt = this.responseText;
var jso = JSON.parse(txt.substr(txt.indexOf('{'), txt.lastIndexOf('}')));
// ...
然后,如果解析的 JSON 是一个数组(或对象列表),您可以使用如下方式迭代它们:
jso.forEach
(
function(item, indx)
{
if (!(typeof item == 'object'))
{ return; }
var key = Object.keys(item)[0]; // your object "number"
var obj = item[key]; // your object number's value
if (isNaN(key * 1)) // checks if the key is a number
{ return; }
// continue here ...
}
);
根据您认为合适的位置相应地使用上面的代码更改。
关于javascript - 使用 JavaScript 根据 JSON 文件开头的内容读取该行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561580/