{
"CollegeResponse": {
"departmentDetails": {
"id": 42,
"departmentName": "computer science",
"labDetails": {
"id": 21,
"description": "machine learning",
"assistant": {
"empid": 201101,
"isPermanent": false
}
},
"affilated": false
}
}
}
responseInString = response.getEntity(String.class);
JSONObject json = new JSONObject(responseInString);
String id = json.getJSONObject("CollegeResponse").getJSONObject("departmentDetails").getString("id");
目前我正在使用此过程来验证db的json响应。但是,如果我的json响应很大,我需要用db解析每个值,怎么可能 我写了一个泛型方法或者它已经存在,比如getvalue(jsondata`),它接受一个json对象找到我需要迭代的级别并获取值。我有很多不同的json响应,所以一个帮助我检索json值的通用方法将使我的工作变得容易。
答案 0 :(得分:1)
我使用了字符串标记化来从json对象中检索值。您需要提供json对象和字段值以获取特定键的值。我们可以进一步优化吗?
package javaapplication1;
import java.util.StringTokenizer;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
public class Tokenization {
public static void main(String args[]) {
JSONObject parentData = new JSONObject();
JSONObject childData = new JSONObject();
parentData.put("command", "dance");
parentData.put("uid", "123123123");
childData.put("uid", "007");
childData.put("username", "sup");
childData.put("password", "bros");
parentData.put("params", childData);
System.out.println(parentData);
String result = getValue(parentData, "params.uid");
System.out.println("Result:" + result);
}
public static String getValue(JSONObject inputJson, String field) {
String resultValue = null;
try {
StringTokenizer stJson = new StringTokenizer(field, ".");
int count = stJson.countTokens();
JSONObject objecStore = new JSONObject();
objecStore = inputJson;
while (stJson.hasMoreTokens()) {
String st = stJson.nextToken();
if (count > 1) {
JSONObject objNode = objecStore.getJSONObject(st);
count--;
objecStore = objNode;
} else {
System.out.println(st);
resultValue = objecStore.getString(st);
}
}
} catch (JSONException e) {
}
return resultValue;
}
}
答案 1 :(得分:0)
我认为你的意思是“解析”而不是“验证” - 你的目标是使用Java代码中的数据。 JAX / B标准定义了Java对象和等效JSON表示之间的映射方式。在您的示例中,您将拥有诸如CollegeResponse和DepartmentDetails等课程。
设置这些Java类是一项繁琐的工作,如果你手工完成,你需要在每个类中创建与每个JSON属性相对应的属性,然后注释该类以告诉JAX / B对应。
此article说明了如何执行此操作。
似乎有Eclipse tools自动化这种手动苦差事。
完成后,将JSON转换为Java的代码变为
JAXBContext context = JAXBContext.newInstance(CollegeResponse.class);
Unmarshaller um = context.createUnmarshaller();
CollegeResponse college = (CollegeResponse ) um.unmarshal(
/* some Reader for the JSON string */ );
净效应是,不是编写大量的小getJSONObject()调用,而是投入设置相应的类,这应该会产生结构良好的代码,其中数据的处理,即真正的业务逻辑,是与解析代码分开,我将其视为“管道”。