java—如何循环json对象?

cbwuti44  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(272)
{
   "stocks":{
      "0":{
         "name":"Torn City Stock Exchange",
         "acronym":"TCSE",
         "director":"None",
         "current_price":10018.747,
         "market_cap":0,
         "total_shares":0,
         "available_shares":0,
         "forecast":"Average",
         "demand":"High"
      },
      "1":{
         "name":"Torn City and Shanghai Banking Corporation",
         "acronym":"TSBC",
         "director":"Mr. Gareth Davies",
         "current_price":529.863,
         "market_cap":4300246833486,
         "total_shares":8115771121,
         "available_shares":0,
         "forecast":"Average",
         "demand":"High",
         "benefit":{
            "requirement":4000000,
            "description":"Entitled to receive occasional dividends"
         }
      },
      "2":{
         "name":"Torn City Investment Banking",
         "acronym":"TCB",
         "director":"Mr. Paul Davies",
         "current_price":502.819,
         "market_cap":5771083717274,
         "total_shares":11477457529,
         "available_shares":1539811799,
         "forecast":"Average",
         "demand":"Average",
         "benefit":{
            "requirement":1500000,
            "description":"Entitled to receive improved interest rates"
         }
      }
}

如何循环遍历所有具有键值对的项?我想提取名称,缩写,总股份,可用股份和需求。请帮帮我!我正在用java创建一个android应用程序,我被困在这里了。

vsdwdz23

vsdwdz231#

您可能需要使用一个众所周知的json库,比如gson或jsonpullparser。gson可以将json反序列化为一个包含您必须定义的对象的Map。所以它就像一个map<integer,bank>。你的银行课程看起来像这样:

public class Bank {
   String acronym;
   String name;
   //...
   Benefit benefit;
}

然后,如果使用gson,解析代码将如下所示:

Map<Integer,Bank> bankMap;

Gson gson = new Gson();

Type type = TypeToken.getParameterized(Map.class, Integer.class, Bank.class).getType();
//result is a String that has your JSON!
bankMap = gson.fromJson(result, type);
for (Bank bank : bankMap.values()) {
   System.out.println("Bank name:" + bank.name);
   //...
}

gson的文档很全面,写得很好。可以在这里找到:https://github.com/google/gson
我希望我写的对你有帮助!祝你好运,请告诉我事情进展如何。

qjp7pelc

qjp7pelc2#

在我看来,这不是在json中拥有对象列表的正确方法。如果可以的话,你应该把这个改成

{
  "stocks": [
    {
      "name": "Torn City Stock Exchange",
      "acronym": "TCSE",
      "director": "None",
      "current_price": 10018.747,
      "market_cap": 0,
      "total_shares": 0,
      "available_shares": 0,
      "forecast": "Average",
      "demand": "High"
    },
    {
      "name": "Torn City and Shanghai Banking Corporation",
      "acronym": "TSBC",
      "director": "Mr. Gareth Davies",
      "current_price": 529.863,
      "market_cap": 4300246833486,
      "total_shares": 8115771121,
      "available_shares": 0,
      "forecast": "Average",
      "demand": "High",
      "benefit": {
        "requirement": 4000000,
        "description": "Entitled to receive occasional dividends"
      }
    },
    {
      "name": "Torn City Investment Banking",
      "acronym": "TCB",
      "director": "Mr. Paul Davies",
      "current_price": 502.819,
      "market_cap": 5771083717274,
      "total_shares": 11477457529,
      "available_shares": 1539811799,
      "forecast": "Average",
      "demand": "Average",
      "benefit": {
        "requirement": 1500000,
        "description": "Entitled to receive improved interest rates"
      }
    }
  ]
}

理想的方法是在java中创建一个Map类,并将json捕获为列表,然后您可以轻松地进行迭代。

private String json = "your json object here";

ObjectMapper objectMapper = new ObjectMapper();

List<MappingClass> stocks = objectMapper.readValue(jsonArray, new 
                            TypeReference<List<MappingClass>>(){});

  for (MappingClass stock : stocks) {
      stock.getName();
      // other fields
  }

试着浏览一下jackson库和objectmapper以供参考。

相关问题