2017-11-04 20 views
3

さてさて、そう、私はこの1つのJSONファイルを持っているJSONオブジェクトの子にどのようにアクセスすればよいですか?

{ 
"status": "success", 
"message": { 
    "affenpinscher": [], 
    "african": [], 
    "airedale": [], 
    "corgi": [ 
     "cardigan" 
    ], 
    "akita": [], 
    "appenzeller": [], 
    "basenji": [], 
    "beagle": [], 
    "bluetick": [], 
    "borzoi": [], 
    "bouvier": [], 
    "boxer": [], 
    "brabancon": [], 
    "briard": [], 
    "bulldog": [ 
     "boston", 
     "french" 
    ] 
    } 
} 

私はリストをループする必要があり、品種の配列が空であるかどうか確認してください。

私はこれまでJSONファイルを扱ってきましたが、これらのリストは通常​​、Arraylistの形式の中にあります。これは単純にループすることができますが、私は何をすべきかはわかりませんこのシナリオでは、

メッセージのすべての「子」を選択する方法はありますか。

これはこれまで私が行ってきたことです。

$.getJSON("https://dog.ceo/api/breeds/list/all", function (resp) { 
    var doglist = $('#doglist'); 
    $.each(resp.message, function(dog) { 
     var dog1 = resp.message; 
     doglist.append('<li>' + dog + '</li>') 
     var subdog = Object.keys(dog1).length; 
     console.log(subdog);   
    }); 
}); 

私はおそらく十分に明確ではありません。私のコードスニペットで

は、予想通り、これは、15を返し

var subdog = Object.keys(dog1).length; 

あります。私は必要なもの

var subdog = Object.keys(dog1.bulldog).length; 

ような何かを行うと、それは2

を返すことですが、それはすべての品種のために自動的に行われる必要があります。リスト

答えて

1

基本的にループあなたが値を取得するために角括弧構文を使用することができます。

Object.keys(dog1).forEach((dog) => { 
    console.log(key) // Will log `bulldog` etc. 
    console.log(dog[key].length); // Will log 2, etc. 
}); 

詳細

0

を試してみてください参照してくださいだろうアレイ。

let dogs = { 
 
    "status": "success", 
 
    "message": { 
 
    "affenpinscher": [], 
 
    "african": [], 
 
    "airedale": [], 
 
    "corgi": [ 
 
     "cardigan" 
 
    ], 
 
    "akita": [], 
 
    "appenzeller": [], 
 
    "basenji": [], 
 
    "beagle": [], 
 
    "bluetick": [], 
 
    "borzoi": [], 
 
    "bouvier": [], 
 
    "boxer": [], 
 
    "brabancon": [], 
 
    "briard": [], 
 
    "bulldog": [ 
 
     "boston", 
 
     "french" 
 
    ] 
 
    } 
 
} 
 

 
for (let key in dogs.message) { 
 
    if (Array.isArray(dogs.message[key]) && dogs.message[key].length > 0) { 
 
    // Do something here 
 
    dogs.message[key].forEach(d => console.log(d)) 
 
    } 
 
}

1

次のように行います

var subdog = Object.keys(dog1).map(dog => dog1[dog].length); 

その後subdogは、各品種のための長さの配列が含まれています。

3

あなたはオブジェクト

let o = {"status":"success","message":{"affenpinscher":[],"african":[],"airedale":[],"corgi":["cardigan"],"akita":[],"appenzeller":[],"basenji":[],"beagle":[],"bluetick":[],"borzoi":[],"bouvier":[],"boxer":[],"brabancon":[],"briard":[],"bulldog":["boston","french"]}}; 
 

 
let len = Object.values(o.message).map(({length}) => length); 
 

 
console.log(len);

0
for(var arr in dogs){ 
    if(arr.length == 0){ 
     //code goes here 
    } 
} 
内のプロパティの値であり、各配列の .lengthを返すために、オブジェクトと .map()の値の配列を取得するために Object.values()を使用することができます

ご希望の場合

0

それぞれの品種を別々にしたいだけで、合計をそれほど変えたくないのです。

for(var i=0; i<dog1.length;i++){ 
    subDog[i] = dog1[i].length; 
    }); 
0

私は再帰的プログラムをする必要があると思います。

let dogs = readJsonFromUrl('http://your.site.com/v1/jsons/...'); 
:そして、ここで

を必要と何らjqueryのは、例えば、オブジェクトとあなたのオブジェクトが

let testObj = { 
 
    lala0: { 
 
     lala1: { 
 
      a: "1" 
 
     }, 
 
     foo1: { 
 
      b: "2" 
 
     }, 
 
     doo1: { 
 
      c: "3" 
 
     } 
 
    }, 
 
    foo0: { 
 
     d: "4" 
 
    }, 
 
    doo0: { 
 
     lala1: { 
 
      lala2: { 
 
       e: "5" 
 
      }, 
 
      foo2: { 
 
       f: "6" 
 
      }, 
 
      doo2: { 
 
       g: "7" 
 
      } 
 
     }, 
 
     foo1: { 
 
      lala2: { 
 
       h: "8" 
 
      }, 
 
      foo2: { 
 
       i: "9" 
 
      }, 
 
      doo2: { 
 
       j: "10" 
 
      } 
 
     }, 
 
     doo1: { 
 
      lala2: { 
 
       k: "11" 
 
      }, 
 
      foo2: { 
 
       l: "12", 
 
       m: "13" 
 
      }, 
 
      doo2: { 
 
       n: "14" 
 
      } 
 
     } 
 
    } 
 
}, 
 
dogs = { 
 
"status": "success", 
 
"message": { 
 
    "affenpinscher": [], 
 
    "african": [], 
 
    "airedale": [], 
 
    "corgi": [ 
 
     "cardigan" 
 
    ], 
 
    "akita": [], 
 
    "appenzeller": [], 
 
    "basenji": [], 
 
    "beagle": [], 
 
    "bluetick": [], 
 
    "borzoi": [], 
 
    "bouvier": [], 
 
    "boxer": [], 
 
    "brabancon": [], 
 
    "briard": [], 
 
    "bulldog": [ 
 
     "boston", 
 
     "french" 
 
    ] 
 
    } 
 
} 
 

 
function isObject(target) { 
 
    return typeof(target) == "object"; 
 
} 
 

 
function Recursive(obj, i = "") { 
 
    for (let key in obj) 
 
     if (obj.hasOwnProperty(key)) 
 
      if (isObject(obj)) { 
 
       value = obj[key]; 
 
       if (value == "[object Object]") 
 
        value = "object"; 
 
       console.log(i + key + ": " + value); 
 
       Recursive(obj[key], i + "----|"); 
 
      } 
 
} 
 

 

 
Recursive(testObj); 
 
console.log("NEW OBJECT!") 
 
Recursive(dogs);

を持つ変数犬を書き換え

されていません

関連する問題