【问题标题】:How to loop through JSON objects?如何遍历 JSON 对象?
【发布时间】:2020-08-21 12:14:37
【问题描述】:
{
   "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 应用程序,但我被困在这里。

【问题讨论】:

  • 您不能从服务器端/源获取“股票”的 JSON 数组吗?这将使您的生活更轻松地迭代它。
  • 让我试试@SiddharthKamaria

标签: java android json api


【解决方案1】:

IMO 这不是在 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 中创建一个映射类并将 JSON 捕获为 List,然后您可以轻松地进行迭代。

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
  }

尝试查看 The Jackson Library 和 ObjectMapper 以供参考。

【讨论】:

  • @AbhishekUpadhyay 我很高兴它对你有用。您可以将我的答案标记为已接受,这样问题就会关闭。
【解决方案2】:

您可能希望使用众所周知的 JSON 库,例如 GSON 或 JsonPullParser。 GSON 可以将您的 JSON 反序列化为包含您必须定义的对象的 Map。所以它将类似于 Map。 你的 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

希望我写的对你有帮助!祝你好运,请告诉我事情进展如何。

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2015-01-11
    相关资源
    最近更新 更多