Java 如何使用JSON解析Android无限数据

Java 如何使用JSON解析Android无限数据,java,android,json,parsing,arraylist,Java,Android,Json,Parsing,Arraylist,我使用的API提供了一个JSON输出。如何在android studio上解析它?我以前从未见过这样的JSON打印输出 { "market": { "100": { "name": "forexample", "surname": "forexample2" }, "101": { "name": "forexample3", "surname": "forexample4" }, . . .

我使用的API提供了一个JSON输出。如何在android studio上解析它?我以前从未见过这样的JSON打印输出

{
"market":   {
        "100": {
        "name": "forexample",
        "surname": "forexample2"
},
         "101": {
        "name": "forexample3",
        "surname": "forexample4"
},

.
.
.

 "999": {
        "name": "forexampleXX",
        "surname": "forexampleXX"
}
}
}
“101”继续增加1。个人身份识别时间太长了。最近的路是什么

这就是从所需对象获取数据的方式

JSONObject json=new JSONObject();
json=response.getJSONObject(“市场”);
迭代器iter=json.keys()//在这里,您可以获得100101102…而无需单独访问
while(iter.hasNext()){
String key=iter.next();
试一试{
Object value=json.get(key);//这里是对象值
}捕获(JSONException e){
//出了点问题!
}
}

如果有什么不清楚的地方,请随时询问。

您的“市场”JSON应该是JSONArray。显示您可以将内容与索引一起使用

更改API输出。像

{
"market":   [
         {
        "name": "forexample",
        "surname": "forexample2"
         },

         {
        "name": "forexample3",
        "surname": "forexample4"
         },

.
.
.

    {
        "name": "forexampleXX",
        "surname": "forexampleXX"
    }
 ]
}
你可以用。 并将json转换为类似

HashMap<String,HashMap<String,Person>> map
for (String key: map.keySet()) {
 HashMap < String, Person > personMap = map.get(key);
 for (String personKey: personMap() {
   Person person = map.get(personKey);
   // do what you want with the person object
  }
 }
HashMap
本文可以帮助解析此类型-

Person将是一个有名字和姓氏的类。 首先获取第一级密钥。->keySet(),并为每个新hashmap获取下一级密钥。差不多

HashMap<String,HashMap<String,Person>> map
for (String key: map.keySet()) {
 HashMap < String, Person > personMap = map.get(key);
 for (String personKey: personMap() {
   Person person = map.get(personKey);
   // do what you want with the person object
  }
 }
for(字符串键:map.keySet()){
HashMappersonMap=map.get(key);
for(字符串personKey:personMap(){
Person=map.get(personKey);
//对person对象执行所需操作
}
}

您可以使用GSON图书馆,它是非常著名的图书馆 像这样添加它

implementation 'com.google.code.gson:gson:2.8.2'
HashMap<String,HashMap<String, User>>  result = gson.fromJson( jsonString , new TypeToken<HashMap<String,HashMap<String, User>>>() {
                        }.getType());
然后你可以这样解析它

Market market = new Gson().fromJson( jsonString , Market.class);
市场等级将在哪里

public class Market {
     public HashMap<Integer ,  User > result ;
}

或者你可以不用这样的类来解析它

implementation 'com.google.code.gson:gson:2.8.2'
HashMap<String,HashMap<String, User>>  result = gson.fromJson( jsonString , new TypeToken<HashMap<String,HashMap<String, User>>>() {
                        }.getType());
HashMap result=gson.fromJson(jsonString,new-TypeToken()){
}.getType());

希望这将帮助您@Bill.

发布完整的
JSON
。它有什么奇怪之处?它可能在object中复制了它的just对象将“market”JsonObject转换为JSONArray。这会变得更简单。“101”继续增加1。进行单独标识的时间太长。最短的方法是什么?@Bill shortest way是更改json响应并使其成为json数组。我应该如何定义“101”要创建json数组?@Bill,是的,一种方法是将您的响应更改为json数组,否则您需要按照模式指定具体的数字,即在您的情况下,它是从100-999,但请记住,如果您的响应在任何时候更改,它将崩溃。@Bill您不需要在数组中定义101,您可以使用位置访问数组抱歉,我无法更改API o输出。还有其他方法吗?你在改变输出方面面临什么问题?因为这是唯一有效的方法。