gpt4 book ai didi

android - 如何使用 gson 在 json 现有结构中再插入一项?

转载 作者:行者123 更新时间:2023-11-29 00:29:37 24 4
gpt4 key购买 nike

下面的代码正确生成了 json 文件的第一个结构。

gson = new GsonBuilder().setPrettyPrinting().create();

AudDetHeader AudDetHeader = new AudDetHeader();

//ArrayList<OrderDetail> AudDetList = new ArrayList<OrderDetail>();
Map<String, AudDet> AudDetList = new HashMap<String, AudDet>();

AudDet AudDet = new AudDet();
AudDet.setLineId("1");
AudDet.setItemNumber("ABC");
AudDet.setQuantity(9);
AudDet.setPrice(10.00);

List<String> phones = new ArrayList<String>();
phones.add("24530001");
phones.add("24530002");
phones.add("24530003");
AudDet.setPhones(phones);

AudDetList.put("teste 2", AudDet);
AudDetHeader.setAudDetList(AudDetList);

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gson.toJson(AudDetHeader);

BufferedWriter bufferedWriter = null;
try {

File file = new File(Environment.getExternalStorageDirectory() + "/download/test/test.json");
if(!file.exists()){
file.createNewFile();
}

FileWriter fileWriter = new FileWriter(file);
bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(jsonString);


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

代码的结果:

{
"Results": {
"teste 2": {
"itemNumber": "ABC",
"lineId": "1",
"phones": [
"24530001",
"24530002",
"24530003"
],
"price": 10.0,
"quantity": 9
}
}
}

我想添加一个新项目。我的愿望是保持下面的结构。

{
"Results":{
"teste 2":{
"itemNumber":"ABC",
"lineId":"1",
"phones":[
"24530001",
"24530002",
"24530003"
],
"price":10.0,
"quantity":9
},
"teste 3":{
"itemNumber":"DEF",
"lineId":"2",
"phones":[
"30303030",
"40404040",
"505050"
],
"price":11.0,
"quantity":12
}
}
}

AudDetHeader.class

public class AuditoriaDetalheHeader {

@SerializedName("Results")
private Map<String, AuditoriaDetalhe> AuditoriaDetalheList;
...
}

AudDet.class

public class AuditoriaDetalhe {

String lineId = null;
String itemNumber = null;
int quantity = 0;
Double price = null;
List<String> phones = new ArrayList<String>();
...
}

最佳答案

用这段代码为我工作!!!

主类

private static File fileJson = new File(Environment.getExternalStorageDirectory() + "/download/test/test.json");

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.teste_criajson);

createJsonStructure();

Button btnSave = (Button)findViewById(R.id.btSave);

btnSalvar.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {

try {
String strFileJson = getStringFromFile(fileJson.toString());
JSONObject jsonObj = new JSONObject(strFileJson);
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
String idAud = "10";

AudDet ad = new AudDet();
ad.setLineId("2");
ad.setItemNumber("DEF");
ad.setQuantity(22);
ad.setPrice(22.22);

List<String> phones = new ArrayList<String>();
phones.add("22");
phones.add("22");
phones.add("22");
ad.setPhones(phones);

String jsonStr = jsonParser.parse(gson.toJson(ad)).toString();
JSONObject JSONObject = new JSONObject(jsonStr);
jsonObj.getJSONObject("Results").put(idAud, JSONObject);

writeJsonFile(fileJson, jsonObj.toString());

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


}
});

如果不存在 json 文件,那么我会创建用于插入项目的基本结构。

public static void createJsonStructure(){
if(!fileJson.exists()){
try {
fileJson.createNewFile();

String jsonString = "{\"Results\":{}}";

writeJsonFile(fileJson, jsonString);

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

打开json文件获取字符串格式,准备插入新项:

public static String getStringFromFile (String filePath) throws Exception {
File fl = new File(filePath);
FileInputStream fin = new FileInputStream(fl);
String ret = convertStreamToString(fin);
//Make sure you close all streams.
fin.close();
return ret;
}
public static String convertStreamToString(InputStream is) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
return sb.toString();
}

写入已经存在的json文件:

public static void writeJsonFile(File file, String json) 
{
BufferedWriter bufferedWriter = null;
try {

if(!file.exists()){
file.createNewFile();
}

FileWriter fileWriter = new FileWriter(file);
bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(json);

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

关于android - 如何使用 gson 在 json 现有结构中再插入一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com