用于json解析和迭代的API:
我正在尝试从ArchiveBatchChangeRequest下的FieldName中获取两个值 - > DocumentSets - > QuerySpecification并将其作为ArrayList返回。
因此返回值应包含CustomerName和DateCreated,因为QuerySpecification是一个大小为2的数组
我似乎无法让这个工作。我担心我的起点非常糟糕,或者可以做得更容易。
JSON输入文件:
{
"ArchiveBatchChangeRequest": [{
"BatchRunSpecification": [{
"BatchOperation": "EXTRACT"
}]
},
{
"OutputSpecification": [{
"ReportFieldNames": ["ReportField1"]
}]
},
{
"DocumentSets": [{
"DocumentSetNo": "1",
"QuerySpecification": [{
"FieldName": "CustomerName",
"SimpleQuery": [{
"Operator": "EQUAL",
"Values": ["Customer1"]
}]
},
{
"FieldName": "DateCreated",
"SimpleQuery": [{
"Operator": "EQUAL",
"Values": ["19-12-2015"]
}]
}]
}]
}]
}
代码:
public ArrayList<String> getElementValue(String elementNode, String objectValue, File batchFile) throws IOException, ParseException{
String [] elementArray = elementNode.split(";");
JSONObject outerObject = null;
ArrayList<String> values = new ArrayList<String>();
try {
JSONParser parser = new JSONParser();
Object object = parser.parse(new FileReader(batchFile));
outerObject = new JSONObject(object.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONArray getArray = null;
for (int i = 0; i < elementArray.length; i++) {
getArray = outerObject.getJSONArray(elementArray[i]);
for (int j = 0; j < getArray.length(); j++) {
for (int j2 = 0; j2 < elementArray.length; j2++) {
if(getArray.getJSONObject(j).names().get(0).equals(elementArray[j2])){
outerObject = getArray.getJSONObject(j);
}
}
}
if(i == elementArray.length - 1){
outerObject = getArray.getJSONObject(0);
}
}
try{
getArray = null;
getArray = outerObject.getJSONArray(objectValue);
}catch(JSONException je){ //Object is not an JSONArray
je.printStackTrace();
}finally{
if(getArray != null){
for (int i = 0; i < getArray.length(); i++) {
values.add(getArray.getString(i).replace("\"", ""));
}
}else
values.add(outerObject.getString(objectValue));
}
return values;
}
答案 0 :(得分:0)
这是您的任务和使用方式..
public void parse(String data) throws JSONException{
org.json.JSONObject jsonObject=new org.json.JSONObject(data);
JSONArray array=jsonObject.getJSONArray("ArchiveBatchChangeRequest");
for(int i=0;i<array.length();i++){
org.json.JSONObject jsonObject2=array.getJSONObject(i);
if(i==0){
JSONArray array1=jsonObject2.getJSONArray("BatchRunSpecification");
org.json.JSONObject jsonObject3=array1.getJSONObject(0);
System.out.println("BatchOperation="+jsonObject3.get("BatchOperation"));
}else if(i==1){
JSONArray array1=jsonObject2.getJSONArray("OutputSpecification");
org.json.JSONObject jsonObject3=array1.getJSONObject(0);
JSONArray array2=jsonObject3.getJSONArray("ReportFieldNames");
System.out.println("ReportFieldNames="+array2.getString(0));
}
else if(i==2){
JSONArray array1=jsonObject2.getJSONArray("DocumentSets");
org.json.JSONObject jsonObject3=array1.getJSONObject(0);
System.out.println("DocumentSetNo="+jsonObject3.getString("DocumentSetNo"));
JSONArray array2=jsonObject3.getJSONArray("QuerySpecification");
for(int j=0;j< array2.length();j++){
org.json.JSONObject jobject=array2.getJSONObject(j);
String fieldName=jobject.getString("FieldName");
System.out.println("value fo FieldName use as you want"+fieldName);
String operator=jobject.getJSONArray("SimpleQuery").getJSONObject(0).getString("Operator");
System.out.println("value fo operator use as you want-"+operator);
String values=jobject.getJSONArray("SimpleQuery").getJSONObject(0).getJSONArray("Values").getString(0);
System.out.println("value fo values use as you want-"+values);
}
}
}
}
我希望它会帮助你......!