我有一个文本字段,用户可以输入数据,一旦收到数据,我想将其附加到现有的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();
}
}
}
答案 0 :(得分:1)
主要逻辑:
您可以在代码中看到4个块
Object
Object
投射到JSonObject
,解析为JsonArray
并迭代打印JsonElement
的Vin Object
方法创建新的JSON String
并将其转换为Gson.toJson
(第二部分不仅仅是出于说明目的)JsonWriter
,创建Vins Object
并使用原始JsonArray
加载,然后添加新元素(在步骤#中创建的新Vin Object
的通讯员3,最后将Vins Object
写入[new]文件。<强>输入:强>
{"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 Class
到public void addVin(Vin vin)
答案 1 :(得分:1)
要保留现有内容并将新内容附加到JSON文件的末尾:
示例1:
new FileWriter(file,true);
或者您可以尝试example02:
FileWriter file= new FileWriter(JSONLPATH,true)