我正在使用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();
答案 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
中有哪些项目,或者有多少。相反,它可以循环遍历数组并打印碰巧存在的任何内容。