【问题标题】:How to read JSON(server response) in Javascript?如何在 Javascript 中读取 JSON(服务器响应)?
【发布时间】:2012-04-03 01:17:21
【问题描述】:

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

{"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”。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript json parsing appcelerator


    【解决方案1】:

    只需使用JSON.parse(serverResponse)

    【讨论】:

    • 这是一个太短的答案。作为评论会更有用。请扩展您的解决方案的说明。例如,serverResponse 是什么? OP没有提到这样的变量,你也没有解释。
    • 你太棒了!
    【解决方案2】:

    如果您来到这里试图了解如何阅读[Response object](就像我一样)- 这可以提供帮助: - 如果您使用 fetch,请在登录控制台之前不要忘记 res.json()

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

    【讨论】:

      【解决方案3】:

      查看该链接。 READ JSON RESPONSE

      完美。

      【讨论】:

        【解决方案4】:

        如果您尝试使用 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; .... 
        }
        

        【讨论】:

        • 在线 var o=JSON.parse(res); 给我语法错误;请建议。我正在尝试使用简单的 javascript 和 IE8
        【解决方案5】:

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

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

        在您的情况下,COLUMNS 和 data 都是数组,所以看起来您正在尝试从与 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 中的第一行,因为我最初误读了。我会留给你来弄清楚如何处理其他的。

        【讨论】:

        • 如果你有办法改变服务器响应的格式,让它看起来更像尼克建议的那样,我建议这样做。您现在使用的格式非常难用。
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2014-10-06
          • 1970-01-01
          • 1970-01-01
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 2015-02-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多