无法创建JsonObject java.lang.IllegalStateException:不是JSON对象

时间:2018-12-15 23:08:05

标签: java json gson

我有这段代码,其中“ Ocupacion”是具有另一个属性对象的对象类。 (由于是大班,所以我不会发布该班的所有属性)

public interface Node<T, N extends Node<T, N>> {
    T getValue();
    List<N> getNeighbors();
    void addNodes(List<N> nodes);
}

public interface TreeNode<T> extends Node<T, TreeNode<T>> {
    List<TreeNode<T>> getChildren();
    void addChildren(List<TreeNode<T>> treeNodes);

    @Override
    default List<TreeNode<T>> getNeighbors() {
        return getChildren();
    }

    @Override
    default void addNodes(List<TreeNode<T>> nodes) {
        addChildren(nodes);
    }
}

然后在另一个类中,我获取json字符串,我想解析它。我这样做:

public String genHor(){
    Collection<Ocupacion> ocupas = new ArrayList<>();
    ocupas= H.makeOcupacion();
    Gson gson = new Gson();
    return gson.toJson(ocupas);
}

然后我得到了java.lang.IllegalStateException:不是JSON对象

字符串json就是这样:

public void assig(String json){
    JsonObject obj = new JsonParser().parse(json).getAsJsonObject();
}

3 个答案:

答案 0 :(得分:1)

... | awk -F'/' '{print $NF "\t" $0}' | sort | cut -f2

这是一个json数组,而不是json对象,因为它位于[{"sesionConcreta":{"grup":{"NumGr":10,"TamGr":200,"subgrupo":[{"NumSub":11,"TamSub":200}],"asignatura":"prop"},"sessio":{"HorasSes":2,"TipoSes":"TEORIA"}},"aula":{"NomAu":"a5105","Capacidad":200,"Tipo":"lab"},"diayHora":{"Dia":"L","Hora":8}}] 中,而不位于[]中:

{}

答案 1 :(得分:0)

jsonString实际上是jsonArray而不是jsonObject。请尝试以下操作:

String jsonStr = "[{\"sesionConcreta\":{\"grup\":{\"NumGr\":10,\"TamGr\":200,\"subgrupo\":[{\"NumSub\":11,\"TamSub\":200}],\"asignatura\":\"prop\"},\"sessio\":{\"HorasSes\":2,\"TipoSes\":\"TEORIA\"}},\"aula\":{\"NomAu\":\"a5105\",\"Capacidad\":200,\"Tipo\":\"lab\"},\"diayHora\":{\"Dia\":\"L\",\"Hora\":8}}]";

JSONArray jsonarray = new JSONArray(jsonStr);

for(int i = 0; i< jsonarray.length(); i++) {
  JSONObject sesionConcreta = (JSONObject)jsonarray.getJSONObject(i).get("sesionConcreta");
  JSONObject grup = (JSONObject)sesionConcreta.get("grup");
  System.out.println(grup.get("NumGr"));
}

答案 2 :(得分:-1)

尝试这个:

public static void assig(String json){
        Gson gson = new Gson();
        Ocupacion[] occs = gson.fromJson(json, Ocupacion[].class); 
        System.out.println(occs);
}