API, используемый для JSon анализа и итерации:Fetch значения JSON в Java
- org.json.simple
- org.json
Я пытаюсь извлечь оба значения из FieldName в разделе ArchiveBatchChangeRequest -> DocumentSets -> QuerySpecification и вернуть его как ArrayList.
- ElementNode = "ArchiveBatchChangeRequest; DocumentSets; QuerySpecification"
- objectValue = входной файл "FieldName"
- пакетник = JSON
Таким образом, возвращаемое значение должно содержать 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;
}