Java-获取不同数量的json变量

时间:2019-04-23 11:07:20

标签: java json

我正在使用Java构建可访问API的工具。

我试图让用户决定要使用哪些参数(例如,通过复选框)。

因此,用户将决定采用5个参数之一:

p1
p2
p3
p4
p5

然后我将使用这些参数调用API并接收Json String作为响应。

Json String可以是

{"data":[{"p1":"value1", "p2":"value2", "p3":"value3", "p4":"value4", "p5":"value5"}]}
{"data":[{"p1":"value1", "p2":"value2", "p3":"value3", "p4":"value4"}]}
{"data":[{"p1":"value1", "p2":"value2", "p3":"value3"}]}
{"data":[{"p1":"value1", "p2":"value2"}]}
or
{"data":[{"p1":"value1"}]}

我正在尝试将“数据”中的所有内容打印到控制台。这是我到目前为止得到的代码:

JsonParser parser = new JsonParser();
JsonObject json = (JsonObject) 
parser.parse(adsInsights.toString());
System.out.println(json.get("p1").getAsString() + "\t" 
        + json.get("p2").getAsString() + "\t" 
        + json.get("p3").getAsString() + "\t" 
        + json.get("p4").getAsString() + "\t" +
        json.get("p5").getAsString()
);

我的问题是:如何确定要打印的内容而不进行大量的if / elses操作?

我需要的只是“数据”中的每个变量。有没有办法做到这一点?

编辑:

首先,感谢您的回答。

我猜这是我所做的:

//getting the keys, which the user has selected. Detailed implementation irrelevant for this matter
String selectedKeys[] = getSelectedKeys(); 

JsonParser parser = new JsonParser();
JsonObject json = (JsonObject) 
parser.parse(adsInsights.toString());
for(int i = 0; i < selectedKeys.length; i++) {
    if(json.has(selectedKeys[i])) {
        System.out.print(json.get(selectedKeys[i]).getAsString() + "\t");
    }
}
System.out.println();

3 个答案:

答案 0 :(得分:2)

无论其中有哪些键,您都可以遍历Json键并打印其值。

JsonParser parser = new JsonParser();
JsonObject json = (JsonObject) 
parser.parse(adsInsights.toString());

for (key: json.keys) {
            System.out.print(json.get(key).getAsString());
        }

答案 1 :(得分:2)

// to check if key exists or not. if not, return empty string.
private String getValues(JSONObject jsonObj, String arg) {
        return jsonObj.get(arg) != null?(String) jsonObj.get(arg):"";
    }

//call getValues function for every key. fetch all keys from keySet Function.
JSONObject check=(JSONObject) obj;
JSONObject data=(JSONObject) check.get("data");
Set<String> keys=data.keySet();
for(String k:keys){
            System.out.println(getValues(data,k));
}

答案 2 :(得分:1)

您是否也在构建API?

我认为从API返回的更好的数据结构是将数组用于“数据”,例如

{
  "data":[ 
    { "id": "p1", "value": "value1" }, 
    { "id": "p2", "value": "value2" }, 
    { "id": "p3", "value": "value3" }, 
    { "id": "p4", "value": "value4" }, 
    { "id": "p5", "value": "value5" }
  ]
}

这样,接收代码不必关心data中有哪些项目,或者有多少。相反,它可以循环遍历数组并打印碰巧存在的任何内容。