如何在JavaScript中读取JSON(服务器响应)?

sxpgvts3  于 2023-11-20  发布在  Java
关注(0)|答案(6)|浏览(127)

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

{"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”。
任何帮助将不胜感激!

toe95027

toe950271#

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

u91tlkcl

u91tlkcl2#

请看一下下面的示例代码片段

JSON示例

{
"name": "mkyong",
"age": 30,
"address": {
    "streetAddress": "88 8nd Street",
    "city": "New York"
},
"phoneNumber": [
    {
        "type": "home",
        "number": "111 111-1111"
    },
    {
        "type": "fax",
        "number": "222 222-2222"
    }
]
}

字符串

这里是读取json的代码

<script>
   var data = '{"name": "mkyong","age": 30,"address": {"streetAddress": "88 8nd Street","city": "New York"},"phoneNumber": [{"type": "home","number": "111 111-1111"},{"type": "fax","number": "222 222-2222"}]}';

var json = JSON.parse(data);
        
alert(json["name"]); //mkyong
alert(json.name); //mkyong

alert(json.address.streetAddress); //88 8nd Street
alert(json["address"].city); //New York
        
alert(json.phoneNumber[0].number); //111 111-1111
alert(json.phoneNumber[1].type); //fax
        
alert(json.phoneNumber.number); //undefined

kknvjkwl

kknvjkwl3#

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中的第一行,因为我最初误读了。我将把它留给你来弄清楚如何处理其他行。

qqrboqgw

qqrboqgw4#

如果你在这里试图找出如何从[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))
    })

字符串

gab6jxml

gab6jxml5#

http://jsonlint.com/中测试您的代码,它说您的服务器响应不是有效的JSON字符串。
另外,我建议检查jQuery.parseJSONhttp://api.jquery.com/jQuery.parseJSON/

vwkv1x7d

vwkv1x7d6#

使用JSON.parse(serverResponse)即可

相关问题