我有一个文本字段,用户可以在其中输入数据,收到数据后我想将其附加到现有的 JSON 文件中。
我能够读取现有数据并获取文本字段值,但是在将新数据附加到现有数据时我遇到了问题。
错误:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 18 path $
下面的代码:
JSON 文件:
{"vins":[{"vin":"544554"},{"vin":"54554"}]}
文本字段值:字符串测试=“3689”; 所以它应该附加为:
{"vins":[{"vin":"544554"},{"vin":"54554"},{"vin":"3689"}]}
文件读写类:
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();
}
}
}
Setter Getter 类:
public class Vin {
@Expose
private String vin;
public String getVin() {
return vin;
}
public void setVin(String vin) {
this.vin = vin;
}
}
public class Vins {
@Expose
List<Vin> vins = new ArrayList<>();
public List<Vin> getVins() {
return vins;
}
public void addVins(Vin vin) {
this.vins.add(vin);
}
}
最佳答案
主要逻辑:
你可以在代码中看到4个 block
- 读取json文件并解析为java
Object
- 将 java
Object
转换为JSonObject
,解析为JsonArray
并迭代打印JsonElement
的数组s - 创建一个新的
Vin 对象
并使用Gson.toJson
方法将其转换为JSON 字符串
(第二部分不是必需的,仅用于说明目的) - 创建一个
JsonWriter
,创建一个Vins 对象
并使用原始JsonArray
加载它,然后添加一个新元素(对应于在步骤 #3 中创建新的Vin 对象
,最后将Vins 对象
写入 [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 兼容。
我还将Vins Class
中的方法:public void addVins(Vin vin)
更改为public void addVin(Vin vin)
关于java - 将文本字段数据附加到 java 中的现有 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44464218/