如何在Javascript中阅读JSON(服务器响应)?

时间:2012-03-18 01:04:34

标签: javascript json parsing appcelerator

我在服务器上发送了一些请求,它回复了我:

{"COLUMNS":["REGISTRATION_DT","USERNAME","PASSWORD","FNAME","LNAME","EMAIL","MOBILE","FACEBOOK_ID"],"DATA":[["March, 17 2012 16:18:00","someuser",somepass,"somename","somesur","someemail",sometel,"someid"]]}

我尝试了很多,但似乎没有什么能为我工作!

var xml2 = this.responseData;
var xml3 = xml2.getElementsByTagName("data");
Ti.API.log(xml3.FNAME);

对于这段代码,我得到“null”。

任何帮助将不胜感激!

6 个答案:

答案 0 :(得分:7)

如果您尝试使用JSON格式,则问题是[...]中的数据也需要成对出现,并且分组为{...},如here

例如,

{ 
      "sales": [ 
         { "firstname" : "John", "lastname" : "Brown" },
         { "firstname" : "Marc", "lastname" : "Johnson" }
      ] // end of sales array
    }

所以你可能有:

{"COLUMNS": [ 
  {"REGISTRATION_DT" : "19901212", "USERNAME" : "kudos", "PASSWORD" : "tx91!#1", ... },
  {"REGISTRATION_DT" : "19940709", "USERNAME" : "jenny", "PASSWORD" : "fxuf#2", ... },
  {"REGISTRATION_DT" : "20070110", "USERNAME" : "benji12", "PASSWORD" : "rabbit19", ... }
 ]
}

如果服务器正在向您发送您称为res的内容,则可以执行此操作以在Javascript中解析它:

var o=JSON.parse(res);

然后,您可以循环遍历列中的每个实例,如下所示:

for (var i=0;i<o.COLUMNS.length;i++)
{  
        var date = o.COLUMNS[i].REGISTRATION_DT; .... 
}

答案 1 :(得分:4)

看到那个链接。 READ JSON RESPONSE

非常完美。

答案 2 :(得分:3)

JSON对象就像任何普通的javascript对象或词典一样工作

// You can do it this way
var data = this.responseData["DATA"]
// Or this way
var data = this.responseData.DATA

在你的情况下,COLUMNS和数据都是数组,所以看起来你试图从与COLUMNS中的“FNAME”元素对应的数据中获取元素?

var columns = this.responseData["COLUMNS"];
var data = this.responseData["DATA"][0];

for(var i=0; i<columns.length; i++){
    if(columns[i] == "FNAME"){
        Ti.API.log(data[i]);
    }
}

编辑:如果您无法更改服务器端的数据,您可以创建自己的对象客户端。如果您必须引用多个列(您可能会这样做),这也会有所帮助。

var columns = this.responseData["COLUMNS"];
var data = this.responseData["DATA"][0];
var realData = {};

for(var i=0; i<columns.length; i++){
    realData[columns[i]] = data[i];
}

// Now you can access properties directly by name.
Ti.API.log(data.FNAME);

更多编辑: 我的答案只考虑DATA中的第一行,因为我最初误读了。我会让你知道如何处理其他人。

答案 3 :(得分:1)

http://jsonlint.com/中测试您的代码,它表示您的服务器的响应不是有效的JSON字符串。

此外,我建议您查看 jQuery.parseJSON http://api.jquery.com/jQuery.parseJSON/

答案 4 :(得分:1)

如果你到这里试图找出如何阅读[Response object](就像我一样) -  这有什么可以帮助: - 如果您使用提取,请在登录控制台之前忘记res.json()

fetch(`http://localhost:3000/data/${hour}`, {
        method: 'get'
    })
    .then(res => {
        return res.json()
      })
    .then((response) => {
        console.log('res: ' + JSON.stringify(response))
    })

答案 5 :(得分:0)

只需使用JSON.parse(serverResponse)

即可