jsonオブジェクトのサイズを取得する


234

私はAJAXリクエストによって返されるjsonオブジェクトを持っていますが、.lengthそれが返り続けるので問題がありundefinedます。私がそれを正しく使用しているかどうか疑問に思っています:

console.log(data.length);
console.log(data.phones.length);

undefined有効なオブジェクトであるにもかかわらず、どちらも戻ります。

更新:
返されるJSONオブジェクトのサンプル:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

返されたJSONのサンプルを投稿できますか?
Joe

よくわかりません。あなたの質問も大丈夫だと思います。
Joe

回答:


555

あなたはこのようなものを使うことができます

<script type="text/javascript">

  var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}

  var count = Object.keys(myObject).length;
  console.log(count);
</script>

62
@Matt、すべてのコードがIE 7または8で動作することは必須ではありません。保護されているこれらの不適切または非標準のプラットフォームは、単に欠点です。
Olofu Mark 2013

5
@OlofuMarkが誰もが使用しているブラウザーを選択できるわけではありません(たとえば、ロックダウンされたネットワーク、社内アプリケーションで使用されるバージョン付きIE DLLの依存関係)。古いブラウザに対応するために多大な労力が必要な場合、それらを無視することは正当化できますが、このような些細なケースでは、これは無礼です
tomfumb

7
@OlofuMarkこれらのバージョンをサポートする必要はありませんが、開発者は、作成したコードが特定のバージョンで機能しない場合に、それを考慮するかどうかを判断できるようにする必要があります。
David Navarre、

JSONがネストされた配列を必要としないソリューションを見るのは素晴らしいことです。JSONのすべての目的は、すべてをオブジェクトにすることだと思いました。
Healforgreen

jsonオブジェクトの長さを取得するための素晴らしいソリューションです
Shaymol Bapary

54

問題は、オブジェクトが連想配列として使用されている場合でも、配列と同じではないため、電話オブジェクトに長さプロパティがないことです(返すJSONのどこかに定義しない限り)。電話オブジェクトが配列の場合、長さになります。2つのオプションがあります(多分もっと)。

  1. JSON構造を変更し(これが可能であると想定)、「電話」が次のようになるようにします。

    "phones":[{"number":"XXXXXXXXXX","type":"mobile"},{"number":"XXXXXXXXXX","type":"mobile"}]

    (0インデックスの配列で返されるため、各電話には単語番号の識別子はありません)。この応答でphones.lengthは有効になります。

  2. 電話オブジェクトに含まれるオブジェクトを反復処理し、移動するにつれてそれらをカウントします。たとえば、

    var key, count = 0;
    for(key in data.phones) {
      if(data.phones.hasOwnProperty(key)) {
        count++;
      }
    }

新しいブラウザのみをターゲットにしている場合、オプション2は次のようになります


JSONオブジェクトがjsonObjectと呼ばれる変数に格納され、上記と同じJSONがある場合、最初のソリューションでJSONオブジェクトの長さをどのように取得しますか: "phones":[{"number": "XXXXXXXXXX" 、 "type": "mobile"}、{"number": "XXXXXXXXXX"、 "type": "mobile"}]
エリック

29

underscore.jsの使用を検討してください。それはあなたがサイズをチェックすることを可能にします、すなわちそのような:

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3

24

JSON形式を変更する必要はありません。

交換:

console.log(data.phones.length);

と:

console.log( Object.keys( data.phones ).length ) ;

16
var json=[{"id":"431","code":"0.85.PSFR01215","price":"2457.77","volume":"23.0","total":"565.29"},{"id":"430","code":"0.85.PSFR00608","price":"1752.45","volume":"4.0","total":"70.1"},{"id":"429","code":"0.84.SMAB00060","price":"4147.5","volume":"2.0","total":"82.95"},{"id":"428","code":"0.84.SMAB00050","price":"4077.5","volume":"3.0","total":"122.32"}] 
var obj = JSON.parse(json);
var length = Object.keys(obj).length; //you get length json result 4

2
これはすでに解析されたjsonオブジェクトです。上記のステートメントを実行すると、「予期しないトークンo in Json」というエラーが発生します。jsonの長さを計算するには、var length = Object.keys(json).lengthを直接実行します。
Aayushi 2017


-3

これを使う

//for getting length of object
 int length = jsonObject.length();

または

//for getting length of array
 int length = jsonArray.length();

6
length()はJSONオブジェクト関数ではありません
Sunding Wei

-5
$(document).ready(function () {
    $('#count_my_data').click(function () {
        var count = 0;
        while (true) {
             try {
                var v1 = mydata[count].TechnologyId.toString();
                count = count + 1;
            }
            catch (e)
            { break; }
        }
        alert(count);
    });
});

1
リストが要素を使い果たしたことを通知するために例外を待つのは悪い考えです。このアプローチは、いずれかの要素(最後の要素も)がTechnologyIdプロパティを欠いている場合、暗黙的に誤ったカウントを与えます
tomfumb

1
このコードは非常に悪いので、これ以上コメントするつもりはありません。投票した-1!
Georgi-it
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.