使用 GSON 将数据从 JSON 文件解析为 Java 对象
Parsing Data From JSON file to Java Object using GSON
我有一个非常长的 JSON 文件,其结构如下
{
"count":123456,
"tags":[
{
"sameAs":["https://www.wikidata.org/wiki/Q11254"],
"url":"https://world.openfoodfacts.org/ingredient/salt",
"products":214841,
"name":"Salt",
"id":"en:salt"
},
{
"url":"https://world.openfoodfacts.org/ingredient/sugar",
"sameAs":["https://www.wikidata.org/wiki/Q11002"],
"name":"Sugar",
"id":"en:sugar",
"products":184348
},
...
]
内部标签对象的顺序不会保持不变,但我认为这不会造成问题。目前这是我用来解析这个 JSON 对象的代码:
这是包含计数项以及名为 IngredientItem 的标签列表的容器。
public class Ingredients {
private int count;
private List<IngredientItem> items;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<IngredientItem> getItems() {
return items;
}
public void setItems(List<IngredientItem> items) {
this.items = items;
}
}
这是每个标签的代码:
public class IngredientItem {
private List<String> sameAs;
private String id;
private String name;
private String url;
private int productNumber;
public IngredientItem(List<String> sameAs, String id, String name, String url, int productNumber) {
this.sameAs = sameAs;
this.id = id;
this.name = name;
this.url = url;
this.productNumber = productNumber;
}
public List<String> getSameAs() {
return sameAs;
}
public void setSameAs(List<String> sameAs) {
this.sameAs = sameAs;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getProductNumber() {
return productNumber;
}
public void setProductNumber(int productNumber) {
this.productNumber = productNumber;
}
@Override
public String toString() {
return "product number: " + getProductNumber() +
"\n" + "name: " + getName() +
"\n" + "id: " + getId() +
"\n" + "same as: " + getSameAs() +
"\n" + "url: " + getUrl();
}
}
这是我实际解析它的主要代码。
Gson gson = new Gson();
FileReader fr = new FileReader("path\to\file\ingredients.json");
Ingredients ingredients = gson.fromJson(fr,Ingredients.class);
if(ingredients.getItems() ==null){
System.out.println("NULL");
}else{
for (IngredientItem item: ingredients.getItems()) {
System.out.println(item.toString());
}
}
出于某种原因,它永远不会填满所有标签中的项目。我已经广泛地研究了这个 Parsing a complex Json Object using GSON in Java question and I cannot seem to find the error. The link to downloading this extremely long JSON file is here Really Long JSON File。如果您将页面另存为 .json,它大约有 121MB,所以请记住这一点。
提前谢谢你。如果需要任何其他信息,请让 m
要使其自动运行,您需要将 Ingredients.items
更改为 Ingredients.tags
。
如果你想保留你的对象结构,你可以查看here如何使用自定义反序列化器或注释来做到这一点。
我有一个非常长的 JSON 文件,其结构如下
{
"count":123456,
"tags":[
{
"sameAs":["https://www.wikidata.org/wiki/Q11254"],
"url":"https://world.openfoodfacts.org/ingredient/salt",
"products":214841,
"name":"Salt",
"id":"en:salt"
},
{
"url":"https://world.openfoodfacts.org/ingredient/sugar",
"sameAs":["https://www.wikidata.org/wiki/Q11002"],
"name":"Sugar",
"id":"en:sugar",
"products":184348
},
...
]
内部标签对象的顺序不会保持不变,但我认为这不会造成问题。目前这是我用来解析这个 JSON 对象的代码:
这是包含计数项以及名为 IngredientItem 的标签列表的容器。
public class Ingredients {
private int count;
private List<IngredientItem> items;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<IngredientItem> getItems() {
return items;
}
public void setItems(List<IngredientItem> items) {
this.items = items;
}
}
这是每个标签的代码:
public class IngredientItem {
private List<String> sameAs;
private String id;
private String name;
private String url;
private int productNumber;
public IngredientItem(List<String> sameAs, String id, String name, String url, int productNumber) {
this.sameAs = sameAs;
this.id = id;
this.name = name;
this.url = url;
this.productNumber = productNumber;
}
public List<String> getSameAs() {
return sameAs;
}
public void setSameAs(List<String> sameAs) {
this.sameAs = sameAs;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getProductNumber() {
return productNumber;
}
public void setProductNumber(int productNumber) {
this.productNumber = productNumber;
}
@Override
public String toString() {
return "product number: " + getProductNumber() +
"\n" + "name: " + getName() +
"\n" + "id: " + getId() +
"\n" + "same as: " + getSameAs() +
"\n" + "url: " + getUrl();
}
}
这是我实际解析它的主要代码。
Gson gson = new Gson();
FileReader fr = new FileReader("path\to\file\ingredients.json");
Ingredients ingredients = gson.fromJson(fr,Ingredients.class);
if(ingredients.getItems() ==null){
System.out.println("NULL");
}else{
for (IngredientItem item: ingredients.getItems()) {
System.out.println(item.toString());
}
}
出于某种原因,它永远不会填满所有标签中的项目。我已经广泛地研究了这个 Parsing a complex Json Object using GSON in Java question and I cannot seem to find the error. The link to downloading this extremely long JSON file is here Really Long JSON File。如果您将页面另存为 .json,它大约有 121MB,所以请记住这一点。
提前谢谢你。如果需要任何其他信息,请让 m
要使其自动运行,您需要将 Ingredients.items
更改为 Ingredients.tags
。
如果你想保留你的对象结构,你可以查看here如何使用自定义反序列化器或注释来做到这一点。