如何使用Java解析具有每个不同键和值的JSON对象?

如何使用Java解析具有每个不同键和值的JSON对象?,java,json,Java,Json,我知道解析这种类型的JSON的答案: { "id": "1001", "type": "Regular" }, { "id": "1002", "type": "Chocolate" }, { "id": "1003", "type": "Blueberry" }, { "id": "1004", "type": "Devil's Foo

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

                    { "id": "1001", "type": "Regular" },
                    { "id": "1002", "type": "Chocolate" },
                    { "id": "1003", "type": "Blueberry" },
                    { "id": "1004", "type": "Devil's Food"}
这里有一个键-值对,键是相同的(比如这里的“id”),值是不同的,我们使用for循环来快速解析它

(对于那些想了解如何解析上述JSON的人,请转到以下链接:)

然而,我试图解析的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循环


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

您可以使用org.json

例如:

jsonobjectjson=newjsonobject(“”);
迭代器keys=json.keys();
while(keys.hasNext()){
String key=keys.next();
System.out.println(“Key:+Key+”值:+json.get(Key));
}

在这种情况下,您可以使用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());
        }
    }
}
import com.google.gson.JsonElement;
导入com.google.gson.JsonObject;
导入com.google.gson.JsonParser;
导入java.io.IOException;
导入java.util.Map;
公共班机{
公共静态void main(字符串[]args)引发IOException{
字符串jsonString=“{\n”+
“免责声明”:“汇率是……….诸如此类的”,\n+
“\'license\”:\“数据来源于各种……诸如此类”,\n”+
“时间戳”:1446886811\n+
“\'base\':\'USD\',\n”+
“\”费率\“:{\n”+
“AED\”:3.67266\n+
“AFN\”:65.059999\n+
“\“全部”:127.896\n”+
“}\n”+
"}";
JsonObject JsonObject=new JsonParser().parse(jsonString.getAsJsonObject();
for(Map.Entry货币:jsonObject.getAsJsonObject(“rates”).entrySet()){
System.out.println(“Currency”+Currency.getKey()+“具有速率”+Currency.getValue());
}
}
}

非常感谢您的帮助和时间,我曾试图对您的答案投1票,但由于我没有15票的声望,所以无法计算(非常感谢您的帮助和时间!如果您不介意的话,请您也提一下如何在Android上将解析结果弹出到下拉列表中。这将对本页面的其他访问者和我都有帮助。我的问题得到了回答,而且很有帮助,我尝试投1票,但因为我没有“15”的名声(这里新增),它没有被计算在内。请查看此项以获取更多帮助:
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());
        }
    }
}