我正在服务器上发送一些请求,它回复我:
{"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”。
如有任何帮助,我们将不胜感激!
如果您尝试使用 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; ....
}
请查看示例代码片段,如下所示
{
"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"
}
]
}
<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
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 中的第一行,因为我最初读错了。我将让您自行决定如何处理其他内容。
如果你来到这里试图找出如何阅读
[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))
})
在 http://jsonlint.com/ 中测试您的代码,它表示您的服务器的响应不是有效的 JSON 字符串。
此外,我建议查看 jQuery.parseJSON http://api.jquery.com/jQuery.parseJSON/
只需使用
JSON.parse(serverResponse)