当前位置: 首页 > 知识库问答 >
问题:

向json元素添加值

宋劲
2023-03-14

我有个文件名测试。json

{ "aaData": 
  [
   {
    "engine": "Trident",
    "browser": "Internet Explorer 4.0",
    "platform": "Win 95+",
    "version": "4",
    "grade": "X"
   },
   {
    "engine": "Trident",
    "browser": "Internet Explorer 5.0",
    "platform": "Win 95+",
    "version": "5",
    "grade": "C"
   }
  ]
}

我读了这个文件,我想得到这个

{ "sEcho":"1",
  "iTotalRecords":97,
  "iTotalDisplayRecords":9,
  "aaData": 
  [
   {
    "engine": "Trident",
    "browser": "Internet Explorer 4.0",
    "platform": "Win 95+",
    "version": "4",
    "grade": "X"
   },
   {
    "engine": "Trident",
    "browser": "Internet Explorer 5.0",
    "platform": "Win 95+",
    "version": "5",
    "grade": "C"
   }
  ]
}

我要阅读和构建的代码

JsonParser parser = new JsonParser(); 
FileReader fr = new FileReader("web.json");
JsonElement element = parser.parse(fr);

StringBuilder sb = new StringBuilder();
sb.append("\"sEcho\":\"1\",");
sb.append("\"iTotalRecords\":\"97\",");
sb.append("\"iTotalDisplayRecords\":\"9\",");

Gson gson = new Gson();   
JsonElement data = gson.fromJson(sb.toString(), JsonElement.class);
data.getAsJsonArray().add(element);

从JSON的那句话中,我得到了

com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)接受格式错误的JSON

我的绳子坏了?

我试过了

Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(sb.toString()));
reader.setLenient(true);
JsonElement element = gson.fromJson(reader, JsonElement.class);
element.getAsJsonArray().add(data);

我知道这不是JSON数组。

共有1个答案

南宫云
2023-03-14

您的字符串以

"sEcho":"1","iTotalRecords":"97","iTotalDisplayRecords":"9",

这不是有效的JSON。要使其成为有效的JSON,它需要位于{}的内部

然而,我的建议是避免自己构建json。

我建议创建一个与输入格式匹配的java类和一个与输出格式匹配的java类,而不是实用地编辑json字符串(这通常很棘手)。

使用以下内容创建输入类的实例:

InputClass i = gson.fromJson(inputString, InputClass.class)

然后创建输出类的实例。

OutputClass o = new OutputClass();
o.sEcho = 1;
o.iTotalRecords= 97;
o.iTotalDisplayRecords = 9;
o.aaData = i;

最后将您的输出渲染回json

String result = gson.toJson(o);

这可能看起来比附加到字符串更长,但它保证生成有效的JSON字符串,并且更擅长处理更改。您的输出也保证始终采用相同的格式。如果输入文件更改了格式,您的输出可能不会正确设置所有值,但至少结构将在那里,这将有助于防止消耗您的输出的任何内容发生中断更改。

 类似资料:
  • 我需要填充一个json文件,现在我有如下内容: 我需要添加另一个“元素”。我的第一步是使用,现在我需要添加新元素。我想我必须使用添加另一个元素,我尝试了以下方法: 但是当我尝试做时,我得到了错误"对象没有方法推送",我认为我做了一些非常错误的事情,因为我没有告诉任何地方的"元素"。 我该怎么做? 编辑:对不起,我脑子里有很多困惑。 我认为从,但我首先得到了我在JSON中输入的内容。 用数组代替对象

  • 问题内容: 我有一个从JSON文件读取的JSON格式对象,该对象包含在一个名为teamJSON的变量中,如下所示: 我想向数组添加一个新项,例如 最后 在写回文件之前。什么是添加到新元素的好方法?我接近了,但是所有双引号都被转义了。我一直在寻找一个很好的答案,但是没有一个案例能解决这个问题。任何帮助表示赞赏。 问题答案: JSON 只是一种 表示法 ;进行所需的更改,以便可以将更改应用于本机 Ja

  • 问题内容: 我有办法 在内部,我想调用另一个方法并将其传递,但是我想向其他对象添加新元素(描述)。 如何在Java中做到这一点?代码是什么样的? 问题答案: 只是一个数组。因此: 您可能需要弄混的通用类型。 您可以更快但更冗长:

  • 我对JavaFX相对较新,我很困惑为什么我下面的代码没有产生预期的结果,即添加到网格中的标签。 我想做的是运行一个测试,将JavaFX标签添加到我的FXML GridPane,因为我想在不久的将来构建一个方法,允许用户选择一个文件,然后在用户选择文件时生成一个标签并将该标签添加到GridPane。 提前感谢, 代码: FXML代码是一个标准文件,其中定义了一个网格窗格,上面列出了fx:id。

  • 我的D3.js代码生成以下HTML(取自inspect元素) 路径呈现一个底部有文本的圆圈。 最终,我希望文本位于SVG元素边界内的圆圈下方。如果SVG元素更大,G元素呈现得更大。我需要控制G元素的大小或路径元素的大小。 粗略的谷歌搜索没有多大帮助 谢谢你的洞察力。

  • 问题内容: 假设我有一个数组,例如: 然后我想将一个元素推/追加到所述数组的末尾,以获得: 我应该使用哪种方法? 那我想在数组的 前面 添加一个元素呢?是否有固定的时间班次? 问题答案: 从 Swift 3/4/5开始 ,操作如下。 向数组末尾添加新元素。 将另一个数组附加到数组的末尾。 向您的数组中插入一个新元素。 将另一个数组的内容插入到数组中。 更多信息可以从第110页开始的“ Swift编