我有一个看起来像
的json文件[{"field1":Value1,
"field2":value2,
"field3_find":[value3,value4],
"field4_find":{"sub1":subval1,"sub2":subvalue2}
}
{"field1":Value5,
"field2":value6,
"field3_find":[value7,value8],
"field4_find":{"sub1":subval3,"sub2":subvalue3}
}
]
我想读Json。查找特定键值对。找到匹配的字段后,根据此字段的值创建一个新字段。回写Json。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.io.FileReader;
JSONParser parser = new JSONParser();
ArrayList<LinkedHashMap< String, JSONObject>> AllRows;
AllRows = (JSONArray) parser.parse(new FileReader(InputFile));
JSONArray New_rows =new JSONArray();
LinkedList<String> FieldNameAnotation=new LinkedList<String>();
FieldNameAnotation.add(new String("field3_find"));
FieldNameAnotation.add(new String("field4_find"));
try {
for(LinkedHashMap<String,JSONObject> map : AllRows){
JSONObject extend_row=new JSONObject();
for (Map.Entry<String, JSONObject> entry : map.entrySet()) {
if ((FieldNameAnotation).contains(entry.getKey()))
{
newvalue1=process1(entry.getKey());
newvalue2=process2(entry.getKey());// call a function process to get this value
extend_row.put(newvalue1,newvalue2);
}
}
extend_row.putAll(map);
New_rows.add(extend_row);
}
}catch (Exception e) {
System.err.println(e);
System.exit(0);
}
然而,这会产生错误 无法将org.json.simple.JSONObject强制转换为java.util.LinkedHashMap。
我知道这是因为我读取JSON的方式。它被读作JSON对象的数组,但我不知道如何读取它
ArrayList<LinkedHashMap< String, JSONObject>>