阅读Json文件。根据其中一个字段值添加其他字段。回写Json

时间:2014-11-21 03:06:06

标签: java json

我有一个看起来像

的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>>

0 个答案:

没有答案