如何使用 javascript 访问 JSON 格式的数据

How to access data in JSON format using javascript

本文关键字:格式 数据 JSON 访问 何使用 javascript      更新时间:2023-09-26

我正在尝试弄清楚如何以 JSON 格式访问数据,并且已经花了一整天的时间寻找方法,但我仍然找不到适合我需求的解决方案。与我的问题最接近的相对问题是这个问题,但无济于事。

基本上,我正在从以JSON格式返回的$.ajax()中检索数据。

[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}]
[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}]

我的问题是我如何访问 JSON 中的元素,比如我想在 javascript 中获取"nv"的所有值或第二个括号中"date"的所有值?我是这些事情的新手,所以我不熟悉术语,对此感到抱歉。

下面是我的代码:

var Data = $.ajax({
    url: url,
    type: 'POST',
    dataType:"json",
    async: false
}).responseText;
console.log(Data);

url 是在我的函数中传递的变量,以防您可能会问。

更新:请参阅安东尼·格里斯特对您的问题的评论,我错过了您的 JSON 无效的事实。既然他还没有发回复,我就去拿

您的 JSON 无效,因为您返回了两个单独的数组,这个数组:

[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}]

而这个:

[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}]

你不能这样做,因为JSON文档的顶层必须是一件事(对象或数组(。

您可以返回一个包含每个数组属性的对象:

{
"vdata":
    [{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
     {"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
     {"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
    ],
"datedata":
    [{"date":"2013-02-01","visits":63},
     {"date":"2013-02-02","visits":30}
    ]
}

解析后(见下文(,您可以像这样访问该数据:

console.log(data.vdata[0].v); // "233"
console.log(data.datedata[0].date); // "2013-02-01"

或者一个有两个插槽的阵列,每个插槽中都有一个阵列:

[
    [{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
     {"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
     {"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
    ],
    [{"date":"2013-02-01","visits":63},
     {"date":"2013-02-02","visits":30}
    ]
]

解析后(见下文(,您可以像这样访问该数据:

console.log(data[0][0].v); // "233"
console.log(data[1][0].date); // "2013-02-01"

就个人而言,我更喜欢使用对象,因为那时很清楚我正在访问哪个数组。


原答案:

jQuery会将JSON解析为一个对象,并将其传递给success函数,然后您可以像访问任何其他对象一样访问该函数。在您的情况下,顶层是一个数组。所以:

$.ajax({
    url: url,
    type: 'POST',
    dataType:"json",
    async: false,
    success: function(data) {
        // Use the line from above that suits the way
        // you updated your JSON structure
    }
});

旁注:async: false已弃用,并将在某个时候被删除。执行同步 ajax 请求通常不是一个好主意,它往往会在请求期间锁定浏览器的 UI。相反,只需构建代码即可在触发success回调时继续处理。

如果我了解您的问题,您需要为此数组中的所有对象访问相同的键。

没有直接的方法可以做到这一点,您必须遍历此数组中的所有对象,然后在每个对象中找到所需的键。

JSON.parse(( 将此字符串转换为 Javascript 对象 (JSON(

var myData = JSON.parse(Data);
for(var i = 0; i < myData.length; i++) {
    console.log("This is the nv value of the " + i + " object: " + myData[i].nv);
}