web-dev-qa-db-ja.com

JavascriptでJSON(サーバー応答)を読み取る方法は?

私はサーバーでいくつかのリクエストを送信していますが、これは私にこれを返信しています:

{"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」になります。

助けていただければ幸いです!

15
BlackM

JSON形式を使用しようとしている場合、問題は[...]もペアである必要があり、{...} like 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; .... 
}
7
Nick

そのリンクを参照してください。 読み取りJSON応答

パーフェクトだ。

4
Umar Asghar

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
Mike Ruhlin

_[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))
    })
_
2
KamilaS

http://jsonlint.com/ でコードをテストすると、サーバーの応答は有効なJSON文字列ではないことがわかります。

さらに、チェックアウトすることをお勧めしますjQuery.parseJSONhttp://api.jquery.com/jQuery.parseJSON/

1
stan

JSON.parse(serverResponse)を使用するだけです

0
Alberto Camargo