将文本字段数据附加到java中的现有JSON文件

时间:2017-06-09 18:06:30

标签: java json gson

我有一个文本字段,用户可以输入数据,一旦收到数据,我想将其附加到现有的JSON文件。

我能够读取现有数据并获取文本字段值,但在使用现有数据附加新数据时,我遇到了问题。

错误:

for repo in a b c d; do cd ~/$repo && git push; done

代码如下:

JSON文件:

com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 18 path $

文本字段值:String test =“3689”; 所以它应该附加为:

{"vins":[{"vin":"544554"},{"vin":"54554"}]}

Filereadwrite类:

{"vins":[{"vin":"544554"},{"vin":"54554"},{"vin":"3689"}]}

Setter Getter课程:

public class JSONFIlewrite {
    public static String Vinno_Read;
    public static List<String> linststring;
    public static void main(String[] args) {
        try {

            JSONParser parser = new JSONParser();
            Object obj = parser.parse(new 
            FileReader("C:\\Amaresh\\Test\\sample_json.json"));

            JSONObject jsonObject = (JSONObject) obj;
            System.out.println(jsonObject);
            linststring= new ArrayList();
            // loop array
            JSONArray msg = (JSONArray) jsonObject.get("vins");
            Iterator iterator = msg.iterator();

            while (iterator.hasNext()) {
                Vinno_Read = iterator.next().toString();

                linststring.add(Vinno_Read);


            }

            String list_string = "";
            System.out.println(linststring);

            for(String temp:linststring){
                list_string += temp;
                System.out.println("amar1"+list_string);
            }

            System.out.println("amar"+list_string);
            Vin vin4 = new Vin();
            vin4.setVin("76354273462");
            Vins vins = new Vins();
            vins.addVins(vin4);

            Gson gson = new Gson();
            //String jsonValue=list_string;

            String jsonValue = gson.toJson(list_string).toString();
            System.out.println("json--"+jsonValue);
            Vins vins1 = gson.fromJson(jsonValue, Vins.class);
            System.out.println("ddd"+vins1);
            Vin vin = new Vin();
            vin.setVin("544554");

            vins1.addVins(vin);

            jsonValue = gson.toJson(vins1).toString();

            BufferedWriter writer = null;
            try {
                writer = new BufferedWriter(new FileWriter("C:\\Amaresh\\Test\\sample_json.json"));
                writer.write(jsonValue);
                System.out.println("Test"+jsonValue);

            } catch (IOException e) {
            } finally {
              try {
                if (writer != null)
                    writer.close();
              } catch (IOException e) {
            }
        }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

2 个答案:

答案 0 :(得分:1)

主要逻辑:

您可以在代码中看到4个块

  1. 读取json文件并解析为java Object
  2. 将java Object投射到JSonObject,解析为JsonArray并迭代打印JsonElement
  3. 阵列
  4. 使用Vin Object方法创建新的JSON String并将其转换为Gson.toJson(第二部分不仅仅是出于说明目的)
  5. 创建JsonWriter,创建Vins Object并使用原始JsonArray加载,然后添加新元素(在步骤#中创建的新Vin Object的通讯员3,最后将Vins Object写入[new]文件。
  6. <强>输入:

    {"vins":[{"vin":"544554"},{"vin":"54554"}]}
    

    <强>输出:

    {"vins":[{"vin":"544554"},{"vin":"54554"},{"vin":"3689"}]}
    

    <强>代码

    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import com.google.gson.Gson;
    import com.google.gson.JsonArray;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import com.google.gson.stream.JsonWriter;
    
    public class JSONFIlewrite {
        public static String Vinno_Read;
        public static List<String> linststring;
    
        public static void main(String[] args) {
            try {
    
                JsonParser parser = new JsonParser();
                Object obj = parser.parse(new FileReader("C:\\Amaresh\\Test\\sample_json.json"));
    
    
    
                JsonObject jsonObject = (JsonObject) obj;
                System.out.println(jsonObject);
                linststring = new ArrayList<String>();
                // loop array
                JsonArray msg = (JsonArray) jsonObject.get("vins");
                Iterator<JsonElement> iterator = msg.iterator();
                while (iterator.hasNext()) {
                    Vinno_Read = iterator.next().toString();
                    System.out.println("Vinno_Read---->" + Vinno_Read);
                }
    
    
    
                Vin newVin = new Vin();
                newVin.setVin("3689");
                Gson gson = new Gson();
                String json = gson.toJson(newVin);
                System.out.println("json---->" + json);
    
    
    
                FileWriter file = new FileWriter("C:\\Amaresh\\Test\\sample_json2.json", false);
                JsonWriter jw = new JsonWriter(file);
                iterator = msg.iterator();
                Vins vins = new Vins();
                while (iterator.hasNext()) {
                    vins.addVin(gson.fromJson(iterator.next().toString(), Vin.class));
                }
                vins.addVin(newVin);
                gson.toJson(vins, Vins.class, jw);
                file.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    

    注意:

    由于我不知道您使用的是哪个库,因此我更新了类名以与GSON兼容。

    我还更改了方法:public void addVins(Vin vin)中的Vins Classpublic void addVin(Vin vin)

答案 1 :(得分:1)

要保留现有内容并将新内容附加到JSON文件的末尾:

示例1:

new FileWriter(file,true);

或者您可以尝试example02:

FileWriter file= new FileWriter(JSONLPATH,true)
相关问题