2016-11-29 3 views
0

У меня возникли проблемы с присоединением к файлу JSON. Я могу добавить новую запись, но не вставить ее в правильное положение.Добавление записи в массив JSON с JSON-простым

Код:

public static void main(String args[]) throws Exception { 

    { 
     File file = new File("jsonFormatting.json"); 
     if (!file.exists()) { 
      System.out.println("No file"); 
     } else { 
      try { 
       JSONParser parser = new JSONParser(); 
       Object obj = parser.parse(new FileReader("jsonFormatting.json")); 
       JSONObject jsonObject = (JSONObject) obj; 
       JSONArray jsonItemInfo = (JSONArray) jsonObject.get("itemInfo"); 

       JSONObject newObject = new JSONObject(); 

       newObject.put("item", new Integer(10003)); 
       newObject.put("name", "ID10003"); 

       StringWriter out = new StringWriter(); 
       newObject.writeJSONString(out); 
       String jsonText = out.toString(); 
       System.out.println(jsonText); 

       jsonItemInfo.add(newObject); 

       FileWriter fileToWrite = new FileWriter("jsonFormatting.json", true); 
       try { 
        fileToWrite.write(jsonItemInfo.toJSONString()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       fileToWrite.flush(); 
       fileToWrite.close(); 

      } catch (IOException | ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

JSON файл:

"sampleArray": [ 
    "Element_0", 
    "Element_1" 
], 
"dataPoint_1": 40, 
"dataPoint_2": 500, 
"dataPoint_3": 650, 
"itemInfo": [ 
    { 
     "item": "10001", 
     "name": "ID10001", 
    }, 
    { 
     "item": "10002", 
     "name": "ID10002", 
    } 
] 

Я хотел бы добавить следующее в "itemInfo":

{ 
     "item": "10003", 
     "name": "ID10003", 
    } 

Однако, когда я бегу мой Java кода, он добавляет это в конец файла JSON, вместо того, чтобы вставлять новую запись после оригинала 2:

[{"item":"10001","name":"ID10001"},{"item":"10002","name":"ID10002"},{"item":10003,"name":"ID10003"}] 

Заранее благодарим за любые советы, которые вы можете предложить!

+0

После дальнейших исследований, казалось бы, я не могу вставить добавление в определенном месте файл. Мне пришлось бы загрузить файл в память, выполнить изменения, а затем перестроить весь JSON и перезаписать оригинал. Может ли кто-нибудь подтвердить это? –

+0

Один вопрос: можете ли вы подтвердить, что ваши данные json-файла совпадают с тем, что вы вставили в вопрос (раздел Json File), чем я могу разобраться в этом вопросе? – Bill

+0

Это действительно так, как в файле, однако скобки вокруг всего кода отсутствуют {}. По какой-то причине вставка кода Stackoverflow не принимала его в блоке. –

ответ

1

Я запускаю этот код, и он отлично работает, вы можете проверить этот материал на своей стороне. Если я понимаю, что вопрос правильный.

public static void main(String args[]) throws Exception { 

      { 
       File file = new File("jsonFormatting.json"); 
       if (!file.exists()) { 
        System.out.println("No file"); 
       } else { 
        try { 
         JSONParser parser = new JSONParser(); 
         Object obj = parser.parse(new FileReader("jsonFormatting.json")); 
         JSONObject jsonObject = (JSONObject) obj; 
         JSONArray jsonItemInfo = (JSONArray) jsonObject.get("itemInfo"); 

         JSONObject newObject = new JSONObject(); 

         newObject.put("item", new Integer(10003)); 
         newObject.put("name", "ID10003"); 

         StringWriter out = new StringWriter(); 
         newObject.writeJSONString(out); 
         String jsonText = out.toString(); 
         System.out.println(jsonText); 

         jsonItemInfo.add(newObject); 
         jsonObject.put("itemInfo", jsonItemInfo); 
         FileWriter fileToWrite = new FileWriter("jsonFormatting.json", false); 
         try { 
          fileToWrite.write(jsonObject.toJSONString()); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
         fileToWrite.flush(); 
         fileToWrite.close(); 

        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 

мои данные jsonFormatting.json файл выглядеть

{"sampleArray": [ 
    "Element_0", 
    "Element_1" 
], 
"dataPoint_1": 40, 
"dataPoint_2": 500, 
"dataPoint_3": 650, 
"itemInfo": [ 
    { 
     "item": "10001", 
     "name": "ID10001" 
    }, 
    { 
     "item": "10002", 
     "name": "ID10002" 
    } 
] 
} 

и выходе

{ 
    "sampleArray": [ 
     "Element_0", 
     "Element_1" 
    ], 
    "itemInfo": [ 
     { 
      "item": "10001", 
      "name": "ID10001" 
     }, 
     { 
      "item": "10002", 
      "name": "ID10002" 
     }, 
     { 
      "item": 10003, 
      "name": "ID10003" 
     } 
    ], 
    "dataPoint_2": 500, 
    "dataPoint_1": 40, 
    "dataPoint_3": 650 
} 
+0

Спасибо, Билл, это отлично работает! Похоже, он пишет весь файл, но это не проблема. –

+0

Счастлив, что это сработает для вас! – Bill

Смежные вопросы