如何在Java上的文件中将多条记录写入JSON

时间:2013-09-25 16:52:51

标签: java json

我需要在一个文件中写多个json,问题是每次插入插入如下:

{"1":"{\"id\":\"1\"}"**}{**"2":"{\"id\":\"2\"}"**}{**"3":"{\"id\":\"3\"}"}

我需要跟随的链可以读取JSON:

{"1":"{\"id\":\"1\"}"**,**"2":"{\"id\":\"2\"}"**,**"3":"{\"id\":\"3\"}"}

我的代码是:

 public void writeMci(String mci, String nombreMci) throws Exception{

          FileReadWrite a=new FileReadWrite();     
          JSONObject vjo = new JSONObject();


          vjo.put(nombreMci, mci);


          try {

          BufferedWriter write=new BufferedWriter(new FileWriter("c:\\JSON.json", true));

              write.write(vjo.toString());
              write.flush();
              write.close();


          } catch (IOException e) {
            //manejar error 
          }

          System.out.print(vjo);




      }

2 个答案:

答案 0 :(得分:1)

你想要的一行

{"1":"{\"id\":\"1\"}"**,**"2":"{\"id\":\"2\"}"**,**"3":"{\"id\":\"3\"}"}

也不合法,我认为你的意思是(至少)这样的事情:

{"1":"{\"id\":\"1\"}","2":"{\"id\":\"2\"}","3":"{\"id\":\"3\"}"}

请注意,这是不是 JSON数组,它是一个对象,其中 string 字段分别称为1 2和3,恰好包含JSON语法字符串值。虽然不是非法的,但你真的想要那个

是非常值得怀疑的

现在,可能是你的意思

{"1":{"id":"1"},"2":{"id":"2"},"3":{"id":"3"}}

还是一个对象,但 object 字段分别称为1 2和3,其中对象只有1个名为id的字段?无论如何(免责声明:我自己也不是org.json库用户 - 见下文 - 所以不保证代码的准确性:)):

// Create the outer container
JSONObject outer = new JSONObject();

// Create a container for the first contained object
JSONObject inner1 = new JSONObject();
inner1.put("id",1);
// and add that to outer
outer.put("1",inner1);

// Create a container for the second contained object
JSONObject inner2 = new JSONObject();
inner2.put("id",2);
// and add to outer as well
outer.put("2",inner2);

// Create a container for the third contained object
JSONObject inner3 = new JSONObject();
inner3.put("id",3);
// and add that to outer
outer.put("3",inner3);

// at this point

outer.toString()

// should return the JSON String from my last step.

如果您确实希望它是一个数组,则需要将对象放在JSONArray中,并将该数组作为命名字段包装在对象中。最终结果看起来或多或少是这样的:

{"data": [{"id":"1"},{"id":"2"},{"id":"3"}]}

内部对象的代码与上面相同,但内部和外部对象之间有一个新层(数组):

JSONArray middle = new JSONArray();
...
middle.add(inner1);
...
middle.add(inner2);
...
middle.add(inner3);
...
outer.put("data",middle);

仍不确定这是否是您真正想要的,但我认为这是迈向解决方案的第一步。话虽这么说,我建议你切换到一个比你显然使用的json.org更好的JSON Java库。看看here对于可用的不同库的一些反馈,对于我一直在使用Jackson的项目,因为我已经很久了,我很满意它,但是我链接到的SO问题谈论其他几个非常好的选择。

答案 1 :(得分:0)

你应该写两个对象,如下所示:

    write.write(vjo.toString());
    write.newLine();
    write.write(conb.toString());
    write.newline();
    write.flush();
    write.close();