在java中重新格式化JSON数组/对象
我正在尝试将这个json文件重新格式化为不同的格式。我以前从未用过杰克逊或格森。我有这个想法,但我不知道如何实施 所以我有一个json文件:file.json,它包含:在java中重新格式化JSON数组/对象,java,json,jackson,gson,Java,Json,Jackson,Gson,我正在尝试将这个json文件重新格式化为不同的格式。我以前从未用过杰克逊或格森。我有这个想法,但我不知道如何实施 所以我有一个json文件:file.json,它包含: { "Fruits": [ { "name": "avocado", "organic": true }, { "name": "mango",
{
"Fruits": [
{
"name": "avocado",
"organic": true
},
{
"name": "mango",
"organic": true
}
]
}
我想要的是这种格式:
{
"List Fruits":{
"Fruits": [
{
"name": "avocado",
"organic": true
},
{
"name": "mango",
"organic": true
}
]
}
}
以某种方式在json文件中添加“列表水果”
我正在尝试使用jackson api,但我不知道如何使用。将JSON分配给字符串变量,例如,将上述JSON分配给名为
JSON
的变量:
String json = "..." // here put your JSON text;
为对象准备类:
class Fruit {
private String name;
private boolean organic;
}
class Fruits {
private List<Fruit> fruits;
}
Gson gson = new Gson();
Fruits fruits = gson.fromJson(json, Fruits.class);
接下来为您的水果
对象准备包装类listofruits
:
class ListOfFruits {
private Fruits listOfFruits;
public ListOfFruits(Fruits fruits) {
listOfFruits = fruits;
}
}
下一步将您的水果
对象打包到另一个:
ListOfFruits lof = new ListOfFruits(fruits);
最后生成输出JSON:
String newJson = gson.toJson(lof);
将JSON分配给字符串变量,例如,将上述JSON分配给名为
JSON
的变量:
String json = "..." // here put your JSON text;
为对象准备类:
class Fruit {
private String name;
private boolean organic;
}
class Fruits {
private List<Fruit> fruits;
}
Gson gson = new Gson();
Fruits fruits = gson.fromJson(json, Fruits.class);
接下来为您的水果
对象准备包装类listofruits
:
class ListOfFruits {
private Fruits listOfFruits;
public ListOfFruits(Fruits fruits) {
listOfFruits = fruits;
}
}
下一步将您的水果
对象打包到另一个:
ListOfFruits lof = new ListOfFruits(fruits);
最后生成输出JSON:
String newJson = gson.toJson(lof);
您不需要创建
POJO
模型来读取和更新JSON
。使用Jackson
,您可以将整个JSON
负载读取到JsonNode
,创建一个带有所需键的Map
,并序列化到JSON
。请参见以下示例:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.File;
import java.util.Collections;
import java.util.Map;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
JsonNode root = mapper.readTree(jsonFile);
Map<String, JsonNode> output = Collections.singletonMap("List Fruits", root);
System.out.println(mapper.writeValueAsString(output));
}
}
您不需要创建
POJO
模型来读取和更新JSON
。使用Jackson
,您可以将整个JSON
负载读取到JsonNode
,创建一个带有所需键的Map
,并序列化到JSON
。请参见以下示例:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.File;
import java.util.Collections;
import java.util.Map;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
JsonNode root = mapper.readTree(jsonFile);
Map<String, JsonNode> output = Collections.singletonMap("List Fruits", root);
System.out.println(mapper.writeValueAsString(output));
}
}
我强烈建议你浏览一下杰克逊或格森图书馆的文档,因为你提到你是新来的。 我已经为这个项目创建了一个git回购示例。此示例使用Jackson API 拜访 这是水果课
public class Fruit {
private String name;
private boolean organic;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getOrganic() {
return organic;
}
public void setOrganic(boolean organic) {
this.organic = organic;
}
@Override
public String toString() {
return "Fruit{" +
"name='" + name + '\'' +
", organic=" + organic +
'}';
}
}
下面是最后一个JSON类的详细信息。这个类将包装从jsn文件加载的初始json
public class FinalJson {
private InitialJson listOfFruits;
@JsonProperty("List Fruits")
public InitialJson getListOfFruits() {
return listOfFruits;
}
public void setListOfFruits(InitialJson listOfFruits) {
this.listOfFruits = listOfFruits;
}
}
下面是InitialJson类的详细信息。这是一个从json文件中提取数据的类
public class InitialJson {
private List<Fruit> fruits;
@JsonProperty("Fruits")
public List<Fruit> getFruits() {
return fruits;
}
public void setFruits(List<Fruit> fruits) {
this.fruits = fruits;
}
@Override
public String toString() {
return "InitialJson{" +
"fruits=" + fruits +
'}';
}
public类InitialJson{
私人水果清单;
@JsonProperty(“果实”)
公共列表getFruits(){
还果;
}
公众水果(列出水果){
这个。水果=水果;
}
@凌驾
公共字符串toString(){
返回“InitialJson{”+
“水果=”+水果+
'}';
}
}
你可以在本地完成回购,它应该可以正常工作。我强烈建议你查阅杰克逊或格森图书馆的文档,因为你提到你是新来的。 我已经为这个项目创建了一个git回购示例。此示例使用Jackson API 拜访 这是水果课
public class Fruit {
private String name;
private boolean organic;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getOrganic() {
return organic;
}
public void setOrganic(boolean organic) {
this.organic = organic;
}
@Override
public String toString() {
return "Fruit{" +
"name='" + name + '\'' +
", organic=" + organic +
'}';
}
}
下面是最后一个JSON类的详细信息。这个类将包装从jsn文件加载的初始json
public class FinalJson {
private InitialJson listOfFruits;
@JsonProperty("List Fruits")
public InitialJson getListOfFruits() {
return listOfFruits;
}
public void setListOfFruits(InitialJson listOfFruits) {
this.listOfFruits = listOfFruits;
}
}
下面是InitialJson类的详细信息。这是一个从json文件中提取数据的类
public class InitialJson {
private List<Fruit> fruits;
@JsonProperty("Fruits")
public List<Fruit> getFruits() {
return fruits;
}
public void setFruits(List<Fruit> fruits) {
this.fruits = fruits;
}
@Override
public String toString() {
return "InitialJson{" +
"fruits=" + fruits +
'}';
}
public类InitialJson{
私人水果清单;
@JsonProperty(“果实”)
公共列表getFruits(){
还果;
}
公众水果(列出水果){
这个。水果=水果;
}
@凌驾
公共字符串toString(){
返回“InitialJson{”+
“水果=”+水果+
'}';
}
}
你可以在本地完成回购并关闭它,它应该可以正常工作。我创建了我的水果和水果类。我不太清楚如何使用包装器。它显示在上面的“下一次将您的
水果
对象打包到另一个”部分。获得{“Listofruits”:{}。我在这里做错了什么。我被这个水果列表如何访问水果和水果类所困扰。如果您能帮忙,我将不胜感激。@Woods我已经为您制作了一个样品。这是一个专业项目。我创建了我的水果和水果类。我不太清楚如何使用包装器。它显示在上面的“下一次将您的水果
对象打包到另一个”部分。获得{“Listofruits”:{}。我在这里做错了什么。我被这个水果列表如何访问水果和水果类所困扰。如果您能帮忙,我将不胜感激。@Woods我已经为您制作了一个样品。这是一个专业项目。它不喜欢这样。它给了我一个错误。线程“main”java.lang.NoClassDefFoundError中出现异常:com/fasterxml/jackson/annotation/JsonAutoDetect@Woods,您需要将依赖项添加到。您使用的是Maven
还是类似的工具?谢谢。我已经解决了这个问题。我添加了jar文件。它起作用了。谢谢有没有办法遍历整个数组并找到诸如水果和蔬菜之类的对象?我的意思是,就像上面所说的,当它找到蔬菜时,就会列出蔬菜的清单。“我正在尝试,但运气不好。”伍兹,这是一个新问题,与原始问题相比。如果我的回答解决了上述问题,请接受并投票。然后再问另一个问题,并添加到这个问题的链接。这将更容易找到和回答其他开发人员。如果您想使用JSON
有效负载,最好创建一个POJO
模型来表示您的JSON
。在那之后,你应该能够在对象上迭代,并根据需要过滤或更改它们。它给了我一个错误。线程“main”java.lang.NoClassDefFoundError中出现异常:com/fasterxml/jackson/annotation/JsonAutoDetect@Woods,您需要将依赖项添加到。您使用的是Maven
还是类似的工具?谢谢。我已经解决了这个问题。我添加了jar文件。它起作用了。谢谢有没有办法遍历整个数组并找到诸如水果和蔬菜之类的对象?我的意思是,就像上面所说的,当它找到蔬菜时,就会列出蔬菜的清单。“我正在尝试,但运气不好。”伍兹,这是一个新问题,与原始问题相比。如果我的回答解决了上述问题,请接受并投票。及