繁体   English   中英

当 JSON 语法错误时,如何将 JSONObject 转换为 JSONArray?

[英]How to turn JSONObject into JSONArray when JSON has wrong syntax?

我有目前的回应:

   "type":"champion",
   "format":"standAloneComplex",
   "version":"10.11.1",
   "data":{
      "Aatrox":{
         "version":"10.11.1",
         "id":"Aatrox",
         "key":"266",
         "name":"Aatrox",
         "title":"the Darkin Blade",
         "blurb":"Once honored defenders of Shurima against the Void, Aatrox and his brethren would eventually become an even greater threat to Runeterra, and were defeated only by cunning mortal sorcery. But after centuries of imprisonment, Aatrox was the first to find...",
         "info":{
            "attack":8,
            "defense":4,
            "magic":3,
            "difficulty":4
         },
         "image":{
            "full":"Aatrox.png",
            "sprite":"champion0.png",
            "group":"champion",
            "x":0,
            "y":0,
            "w":48,
            "h":48
         },
         "tags":[
            "Fighter",
            "Tank"
         ],
         "partype":"Blood Well",
         "stats":{
            "hp":580,
            "hpperlevel":90,
            "mp":0,
            "mpperlevel":0,
            "movespeed":345,
            "armor":38,
            "armorperlevel":3.25,
            "spellblock":32.1,
            "spellblockperlevel":1.25,
            "attackrange":175,
            "hpregen":3,
            "hpregenperlevel":1,
            "mpregen":0,
            "mpregenperlevel":0,
            "crit":0,
            "critperlevel":0,
            "attackdamage":60,
            "attackdamageperlevel":5,
            "attackspeedperlevel":2.5,
            "attackspeed":0.651
         }
      },
      "Ahri":{
         "version":"10.11.1",
         "id":"Ahri",
         "key":"103",
         "name":"Ahri",
         "title":"the Nine-Tailed Fox",
         "blurb":"Innately connected to the latent power of Runeterra, Ahri is a vastaya who can reshape magic into orbs of raw energy. She revels in toying with her prey by manipulating their emotions before devouring their life essence. Despite her predatory nature...",
         "info":{
            "attack":3,
            "defense":4,
            "magic":8,
            "difficulty":5
         },
         "image":{
            "full":"Ahri.png",
            "sprite":"champion0.png",
            "group":"champion",
            "x":48,
            "y":0,
            "w":48,
            "h":48
         },
         "tags":[
            "Mage",
            "Assassin"
         ],
         "partype":"Mana",
         "stats":{
            "hp":526,
            "hpperlevel":92,
            "mp":418,
            "mpperlevel":25,
            "movespeed":330,
            "armor":20.88,
            "armorperlevel":3.5,
            "spellblock":30,
            "spellblockperlevel":0.5,
            "attackrange":550,
            "hpregen":6.5,
            "hpregenperlevel":0.6,
            "mpregen":8,
            "mpregenperlevel":0.8,
            "crit":0,
            "critperlevel":0,
            "attackdamage":53.04,
            "attackdamageperlevel":3,
            "attackspeedperlevel":2,
            "attackspeed":0.668
         }
      }
}
}

(最后两个大括号可能会关闭,因为我不得不缩短响应,因为它太大了)我正在尝试为每个冠军创建一个 JSONArray,所以首先是 Aatrox,其次是 Ahri,等等。)

由于此响应的语法,使用:

String returnString = (source);
JSONObject returnJSON = new JSONObject(returnString);
JSONArray arr= returnJSON.getJSONArray("data");

似乎不起作用,我认为这是因为 JSON 中缺少“[]”(方括号)。 有没有办法仍然可以使用当前的 state 创建 JSONArray?

提前致谢。

您需要了解 JSONObject 是键值对,而 JSONArray 是任何类型对象的列表。 您不能只将 jsonObject 转换为 JSONArray。 如果你想转换它你可以做这样的事情..

    JSONArray output = new JSONArray();
    JSONObject dataObj = returnJSON.getJSONObject("data");
    Set<String> keys = dataObj.keySet();
    for (String key : keys) {
        JSONObject obj = dataObj.getJSONObject(key);
        // your logic for populating output
    }

使用https://jsonformatter.curiousconcept.com/分析您的 JSON 文件,您似乎错过了第一个花括号。 添加它们会导致正确的结果。

{
   "type":"champion",
   "format":"standAloneComplex",
   "version":"10.11.1",
   "data":{
      "Aatrox":{
         "version":"10.11.1",
         "id":"Aatrox",
         "key":"266",
         "name":"Aatrox",
         "title":"the Darkin Blade",
         "blurb":"Once honored defenders of Shurima against the Void, Aatrox and his brethren would eventually become an even greater threat to Runeterra, and were defeated only by cunning mortal sorcery. But after centuries of imprisonment, Aatrox was the first to find...",
         "info":{
            "attack":8,
            "defense":4,
            "magic":3,
            "difficulty":4
         },
         "image":{
            "full":"Aatrox.png",
            "sprite":"champion0.png",
            "group":"champion",
            "x":0,
            "y":0,
            "w":48,
            "h":48
         },
         "tags":[
            "Fighter",
            "Tank"
         ],
         "partype":"Blood Well",
         "stats":{
            "hp":580,
            "hpperlevel":90,
            "mp":0,
            "mpperlevel":0,
            "movespeed":345,
            "armor":38,
            "armorperlevel":3.25,
            "spellblock":32.1,
            "spellblockperlevel":1.25,
            "attackrange":175,
            "hpregen":3,
            "hpregenperlevel":1,
            "mpregen":0,
            "mpregenperlevel":0,
            "crit":0,
            "critperlevel":0,
            "attackdamage":60,
            "attackdamageperlevel":5,
            "attackspeedperlevel":2.5,
            "attackspeed":0.651
         }
      },
      "Ahri":{
         "version":"10.11.1",
         "id":"Ahri",
         "key":"103",
         "name":"Ahri",
         "title":"the Nine-Tailed Fox",
         "blurb":"Innately connected to the latent power of Runeterra, Ahri is a vastaya who can reshape magic into orbs of raw energy. She revels in toying with her prey by manipulating their emotions before devouring their life essence. Despite her predatory nature...",
         "info":{
            "attack":3,
            "defense":4,
            "magic":8,
            "difficulty":5
         },
         "image":{
            "full":"Ahri.png",
            "sprite":"champion0.png",
            "group":"champion",
            "x":48,
            "y":0,
            "w":48,
            "h":48
         },
         "tags":[
            "Mage",
            "Assassin"
         ],
         "partype":"Mana",
         "stats":{
            "hp":526,
            "hpperlevel":92,
            "mp":418,
            "mpperlevel":25,
            "movespeed":330,
            "armor":20.88,
            "armorperlevel":3.5,
            "spellblock":30,
            "spellblockperlevel":0.5,
            "attackrange":550,
            "hpregen":6.5,
            "hpregenperlevel":0.6,
            "mpregen":8,
            "mpregenperlevel":0.8,
            "crit":0,
            "critperlevel":0,
            "attackdamage":53.04,
            "attackdamageperlevel":3,
            "attackspeedperlevel":2,
            "attackspeed":0.668
         }
      }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM