【问题标题】:How to parse the JSON objects with each different key and value, using Java?如何使用 Java 解析具有每个不同键和值的 JSON 对象?
【发布时间】:2015-11-07 18:26:22
【问题描述】:

我知道解析这种类型的JSON的答案:

                    { "id": "1001", "type": "Regular" },
                    { "id": "1002", "type": "Chocolate" },
                    { "id": "1003", "type": "Blueberry" },
                    { "id": "1004", "type": "Devil's Food"}

其中有键值对,键相同(如这里的'id')和值不同,我们使用for循环快速解析它。

(想了解如何解析以上JSON,请到此链接:How to parse nested JSON object using the json library?

但是,我尝试解析的 JSON 是一个不同的 JSON,它对于每个不同的值都没有像上面的“Id”这样的相同键,但每个键都是具有不同值的新键。下面是例子:

{
  "disclaimer": "Exchange rates are ...........blah blah",
  "license": "Data sourced from various .......blah blah",
  "timestamp": 1446886811,
  "base": "USD",
  "rates": {
    "AED": 3.67266,
    "AFN": 65.059999,
    "ALL": 127.896
.
.
All the currency values.
.
   }
}

我不知道如何用所有不同的货币键(如 AED 及其价值的货币)解析上述一个并将它们弹出到下拉列表中。

我是否必须为每种不同的货币和价值对编写一行新代码,或者在某种程度上也可以为此使用 for 循环。

如果可能的话,有人可以提供一些行代码吗?

【问题讨论】:

    标签: java json


    【解决方案1】:

    你可以使用 org.json 来做这件事。

    例如:

    JSONObject json = new JSONObject("<jsonString>");
     Iterator<String> keys = json.keys();
    
        while (keys.hasNext()) {
            String key = keys.next();
            System.out.println("Key :" + key + "  Value :" + json.get(key));
        }
    

    【讨论】:

    • 非常感谢您的帮助和时间!如果您不介意,能否请您提一下如何将解析结果弹出到 Android 上的下拉列表中。这将有助于该页面的其他访问者以及我。我的问题得到了回答,它有帮助,我试图投 1 票,但由于我没有“15”的声誉(这里是新的),所以它没有被计算在内。
    • 请查看此以获得更多帮助:androidbegin.com/tutorial/…
    【解决方案2】:

    在这种情况下,您可以使用 GSON。我只会以相应的汇率打印货币,但您可以构建不同的数据结构(例如地图)并在您的系统中使用它。

    import com.google.gson.JsonElement;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    
    import java.io.IOException;
    import java.util.Map;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            String jsonString = "{\n" +
                    "  \"disclaimer\": \"Exchange rates are ...........blah blah\",\n" +
                    "  \"license\": \"Data sourced from various .......blah blah\",\n" +
                    "  \"timestamp\": 1446886811,\n" +
                    "  \"base\": \"USD\",\n" +
                    "  \"rates\": {\n" +
                    "    \"AED\": 3.67266,\n" +
                    "    \"AFN\": 65.059999,\n" +
                    "    \"ALL\": 127.896\n" +
                    "  }\n" +
                    "}";
            JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject();
            for(Map.Entry<String, JsonElement> currency: jsonObject.getAsJsonObject("rates").entrySet()){
                System.out.println("Currency "+ currency.getKey()+" has rate " + currency.getValue());
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的帮助和时间,我尝试为您的回答投 1 票,但由于我没有 15 名声望,因此没有被计算在内。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多