Как читать JSON (ответ сервера) в Javascript?
Я отправляю запрос на сервер, и он отвечает мне на это:
{"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".
Любая помощь будет оценена!
Ответы
Ответ 1
Если вы пытаетесь использовать формат JSON, ваша проблема в том, что данные в [...]
также должны быть попарно и сгруппированы в {...}
, например здесь.
Например,
{
"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; ....
}
Ответ 2
Объекты JSON работают так же, как и любые обычные javascript-объекты или словари
// You can do it this way
var data = this.responseData["DATA"]
// Or this way
var data = this.responseData.DATA
В вашем случае COLUMNS и данные являются массивами, поэтому похоже, что вы пытаетесь получить элемент из данных, соответствующих элементу "FNAME" в COLUMNS?
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]);
}
}
EDIT: Если вы не можете изменить данные на сервере, вы можете создать свою собственную клиентскую сторону объекта. Это также помогает, если вам нужно обратиться к нескольким столбцам (что вы, вероятно, делаете).
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
см. эту ссылку. READ JSON RESPONSE
Идеально.
Ответ 4
Проверяя код в http://jsonlint.com/, он говорит, что ваш ответ сервера не является допустимой строкой JSON.
Кроме того, я рекомендую проверить jQuery.parseJSON http://api.jquery.com/jQuery.parseJSON/
Ответ 5
Если вы попытаетесь выяснить, как читать из [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))
})
Ответ 6
Просто используйте JSON.parse(serverResponse)