簡體   English   中英

從JSON文件中的JSON數組讀取對象數組(使用Jackson)

[英]Read Object Array From JSON Array in a JSON file (using Jackson)

我正在嘗試從json文件中的JSON數組讀取對象數組。 讀取對象內部的數組(讓我們將其稱為根對象)並不確定該怎么做已經有一段時間了。 底部的問題。

拳類:(包含主要方法)

package Shopping;
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.map.ObjectMapper;
import org.json.simple.parser.ParseException;

public class Game {        

public static void main(String[] args) throws IOException, 
ParseException{ 

    File file = new File("shopping.json");       
    ObjectMapper mapper = new ObjectMapper();

        Main m = mapper.readValue(file, Main.class);
        System.out.println(m.getDate());

        ShoppingList[] list = mapper.readValue(file, 
        ShoppingList[].class);
        System.out.println(list.toString());

    }
}

二等艙:

package Shopping;
import org.codehaus.jackson.annotate.JsonProperty;

public class Main {
private String date; 
private String name;
private String Store;

private ShoppingList List;

// BELOW THE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}

第三類:

package Shopping;

import java.io.IOException;
import java.math.BigInteger;
import java.util.*;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.json.simple.parser.ParseException;

public class ShoppingList {

private String name;
private int amount;

// AGAIN BELOW THESE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}

這是保存JSON數據的JSON文件:(Shopping.json)

{
  "date": "2016-07-14",
  "name": "Candice",
  "Store": "aStore",
  "Food": [
    {
      "amount": 6,
      "name": "eggs"
    },
    {
      "amount": 1,
      "name": "Chicken"
    },
    {
      "amount": 5,
      "name": "Bananas"
    },
    {
      "amount": 1,
      "name": "Pasta"
    }
  ]
}

當我嘗試運行main方法時,出現以下錯誤消息:

run:
Exception in thread "main" 
org.codehaus.jackson.map.JsonMappingException: Can not deserialize 
instance of Shopping.ShoppingList out of START_ARRAY token
at [Source: Shopping.json; line: 6, column: 26] (through reference chain: 
Shopping.Main["Food"])
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeUsingCreator(BeanDeserializer.java:560)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:366)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:230)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:334)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:495)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:351)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1349)
at shopping.Shopping.main(Shopping.java:31) 
/Users/Me/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

誰能解釋我為什么會為我得到這個錯誤,還有誰能解決這個問題,以便我可以讀取數組以返回其中的項目。 任何幫助將不勝感激。 非常感謝。

Pojo課堂上的問題。 試試這個:

轉換器:

String json= "{\n" +
            "  \"date\": \"2016-07-14\",\n" +
            "  \"name\": \"Candice\",\n" +
            "  \"Store\": \"aStore\",\n" +
            "  \"Food\": [\n" +
            "    {\n" +
            "      \"amount\": 6,\n" +
            "      \"name\": \"eggs\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"amount\": 1,\n" +
            "      \"name\": \"Chicken\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"amount\": 5,\n" +
            "      \"name\": \"Bananas\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"amount\": 1,\n" +
            "      \"name\": \"Pasta\"\n" +
            "    }\n" +
            "  ]\n" +
            "}";
Main main = new ObjectMapper().readValue(json,Main.class);

主類:

package Shopping;
import org.codehaus.jackson.annotate.JsonProperty;

public class Main {
private String date;
private String name;
@JsonProperty("Store")
private String store;

@JsonProperty("Food")
private List<ShoppingList> Food;

// BELOW THE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}

購物清單:

public class ShoppingList implements Serializable{

private static final long serialVersionUID = 1L;

private String name;
private int amount;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM