【问题标题】:How to parse JSON with multiple rows/results如何解析具有多行/结果的 JSON
【发布时间】:2015-06-24 06:39:14
【问题描述】:

我不知道这是否是格式错误的 JSON 字符串,但我无法弄清楚如何解析每个结果以获取数据。

这是来自我的 $.ajax 函数的 data.d 响应(它在代码隐藏 (C#) 中调用 WebMethod):

{"Row":[
{"ID1":"TBU9THLCZS","Project":"1","ID2":"Y5468ASV73","URL":"http://blah1.com","Wave":"w1","StartDate":"18/06/2015 5:46:41 AM","EndDate":"18/06/2015 5:47:24 AM","Status":"1","Check":"0"},
{"ID1":"TBU9THLCZS","Project":"2","ID2":"T7J6SHZCH","URL":"http://blah2.com","Wave":"w1","StartDate":"23/06/2015 4:35:22 AM","EndDate":"","Status":"","Check":""}
]}

在我看过的所有示例中,只有一两个显示了我的“行”所在的位置,并且解决方案不相关,例如一个人在最后一个数组后面有一个逗号。

即使不是直截了当的答案,我也会对一些指针感到满意。

我尝试了各种不同的 response.Row、response[0] 组合,使用 $.each,但我就是无法得到它。

编辑,这是我的 ajax 调用:

$.ajax({
    url: "Mgr.aspx/ShowActivity",
    type: "POST",
    data: JSON.stringify({
        "ID": "null"
    }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {
        var data = response.hasOwnProperty("d") ? response.d : response;
        console.log(data);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        $('#lblResErr').html('<span style="color:red;">' + thrownError);
    }
});

目前我一直在尝试将 ID1 值和 ID2 值输入控制台。

编辑(已解决):感谢 YTAM 和 Panagiotis!

success: function (response) {
    var data = response.hasOwnProperty("d") ? response.d : response;
    data = JSON.parse(data);
    console.log(data);
}

现在控制台显示了一个包含两个对象的数组,现在我知道如何处理它们了!!

【问题讨论】:

  • 这个问题同时被标记为 C# 和 Ajax,尽管您似乎在问如何在 Javascript 中解析 Json。你尝试了什么?代码在哪里?只需解析整个字符串,在任何语言中,您都会返回一个对象,其中包含一个包含 2 个对象的 Row 数组
  • 抱歉,如果标记 C# 也混淆了问题 - 我认为这可能是最好的,因为 ajax 函数在 C# 中调用函数可能存在相关问题。
  • 其实你应该去掉ajaxc#标签,加上javascript然后贴出你试过的代码。听起来好像您在访问结果对象的属性时遇到了麻烦。这有点奇怪,response.Row[0] 是显而易见的选择 - 你有一个带有 Row 属性的响应对象,它实际上是一个数组
  • 你们 Panagiotis 和 YTAM 是传奇,就是这样!我将在上面更新我的代码。

标签: javascript jquery ajax json


【解决方案1】:

首先你必须用 JSON.parse 解析字符串

var data= JSON.parse(rowData);

然后你会得到如下所示的对象,

data = {
"Row": [
{
  "ID1":"TBU9THLCZS",
  "Project":"1",
  "ID2":"Y5468ASV73",
  "URL":"http://blah1.com",
  "Wave":"w1",
  "StartDate":"18/06/2015 5:46:41 AM",
  "EndDate":"18/06/2015 5:47:24 AM",
  "Status":"1",
  "Check":"0"
},
{
  "ID1":"TBU9THLCZS",
  "Project":"2",
  "ID2":"T7J6SHZCH",
  "URL":"http://blah2.com",
  "Wave":"w1",
  "StartDate":"23/06/2015 4:35:22 AM",
  "EndDate":"",
  "Status":"",
  "Check":""
}
]}

这里我给出了两个选项,要么直接从数据变量中检索数据,要么通过循环。

data.row[0].ID1
data.row[0].Project
data.row[0].ID2

等等

使用循环,

var result = json.row;
for (var i = 0; i < result.length; i++) {
  var object = result[i];
   for (property in object) {
    var value = object[property];
  }
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可能从 Web 方法中获取 json 字符串,而不是实际的 JavaScript 对象。将其解析为 JavaScript 对象 在做

    var data = JSON.parse(response); 
    

    然后你就可以遍历data.Row

    【讨论】:

    • 对完全不同的事物(字符串和 Javascript 对象)重用相同的变量是一个的想法
    • @PanagiotisKanavos 够公平
    • 我也会带上它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多