javascript - 使用 JavaScript 根据 JSON 文件开头的内容读取该行

标签 javascript json html

例如,我有一个名为 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/

相关文章:

javascript - 如何使用 jquery 将动态高度及其 html 代码添加到 div 中?

html - 如何创建元素从左到右、从上到下 float 的布局

java - 如何在打印文本字符串时使用 Thymeleaf 忽略 HTML 标签?

javascript - kcfinder 空白浏览页面

javascript - 当用户从 asp.net 中的 gridview 删除行时显示警告消息

javascript - meteor 路由错误 : There is no route for the path:/

json - 条件语句在 json 模式验证中不起作用

javascript - 带数组的反向查找对象

javascript - 使用 Node 将大数组写入文件

javascript - 如何获得 % relative div 中的值