0

我想我在解析这个 json 对象时遗漏了一些东西。我收到的输出格式如下:

   {
  "columns" : [ "type", "relation" ],
  "data" : [ [ "SOURCE", {
    "paged_traverse" : "localhost/db/data/node/26/paged/traverse/{returnType}{?pageSize,leaseTime}",
    "outgoing_relationships" : "localhost/db/data/node/26/relationships/out",
    "data" : {
      "DATUM" : "December"
    },
    "all_typed_relationships" : "localhost/db/data/node/26/relationships/all/{-list|&|types}",
    "traverse" : "localhost/db/data/node/26/traverse/{returnType}",
    "self" : "localhost/db/data/node/26",
    "all_relationships" : "localhost/db/data/node/26/relationships/all",
    "property" : "localhost/db/data/node/26/properties/{key}",
    "outgoing_typed_relationships" : "localhost/db/data/node/26/relationships/out/{-list|&|types}",
    "properties" : "localhost/db/data/node/26/properties",
    "incoming_relationships" : "localhost/db/data/node/26/relationships/in",
    "incoming_typed_relationships" : "localhost/db/data/node/26/relationships/in/{-list|&|types}",
    "extensions" : {
    },
    "create_relationship" : "localhost/db/data/node/26/relationships"
  } ]]
}

我设法在 GSON 中正确解析了最里面的部分:

public class Data
{
    private String paged;
    private String out;
    private Map<String, String> data;  
        ...
}

但是当我提供全身时,我得到以下异常:

Exception in thread "main" com.google.gson.JsonParseException: The JsonDeserializer MapTypeAdapter failed to deserialize json object
  {
      "columns" : [ "type", "relation" ],
      "data" : [ [ "SOURCE", {
        "paged" : foo/{returnType}{?pageSize,leaseTime}",
        "out" : "bar",
        "data" : {
          "DATUM" : "December"
          }
        } ], 
        [ "SOURCE", {
        "paged" : "test/{returnType}{?pageSize,leaseTime}",
        "out" : "baz",
        "data" : {
          "DATUM" : "Steve"
           }
         } 
        ]
      ] 
    }  given the type java.util.Map<java.lang.String, java.lang.String>  

java:498) 在 com.google.gson.Gson.fromJson(Gson.java:467) 在 com.google.gson.Gson.fromJson(Gson.java:417) 在 com.google.gson.Gson.fromJson(Gson .java:389) 在 com.skyscraper.transformer.NodeTransformer.fromGson(NodeTransformer.java:24) 在 com.skyscraper.query.read.Retriever.queryNode(Retriever.java:128) 在 com.skyscraper.query.read。 Retriever.main(Retriever.java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 467) 在 com.google.gson.Gson.fromJson(Gson.java:417) 在 com.google.gson.Gson.fromJson(Gson.java:389) 在 com.skyscraper.transformer.NodeTransformer.fromGson(NodeTransformer.java :24) at com.skyscraper.query.read.Retriever.queryNode(Retriever.java:128) at com.skyscraper.query.read.Retriever.main(Retriever.java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 467) 在 com.google.gson.Gson.fromJson(Gson.java:417) 在 com.google.gson.Gson.fromJson(Gson.java:389) 在 com.skyscraper.transformer.NodeTransformer.fromGson(NodeTransformer.java :24) at com.skyscraper.query.read.Retriever.queryNode(Retriever.java:128) at com.skyscraper.query.read.Retriever.main(Retriever.java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 389) 在 com.skyscraper.transformer.NodeTransformer.fromGson(NodeTransformer.java:24) 在 com.skyscraper.query.read.Retriever.queryNode(Retriever.java:128) 在 com.skyscraper.query.read.Retriever.main (Retriever.java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 389) 在 com.skyscraper.transformer.NodeTransformer.fromGson(NodeTransformer.java:24) 在 com.skyscraper.query.read.Retriever.queryNode(Retriever.java:128) 在 com.skyscraper.query.read.Retriever.main (Retriever.java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个 java:67) 原因:java.lang.IllegalStateException:这不是 JSON 对象。在 com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:83) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:66) 在 com.google.gson.MapTypeAdapter.deserialize(MapTypeAdapter.java:33 ) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:51) ... 还有 14 个

所以问题再次是我如何正确解析这个 json 输出。如果有任何价值,它来自neo4j 休息调用。

当前实施:

   import java.util.ArrayList;
import java.util.List;

public class Wrapper {

    private String[] columns = new String[] { "type", "relation" };
    private List<List<Object>> f = new ArrayList<List<Object>>();

    public String[] getColumns() {
        return columns;
    }

    public void setColumns(String[] columns) {
        this.columns = columns;
    }

    public List<List<Object>> getF() {
        return f;
    }

    public void setF(List<List<Object>> f) {
        this.f = f;
    }
}


public class NodeTransformer {

    public static void main(String[] a) {

        Gson gson = new Gson();
        Wrapper w = new Wrapper();
        List<List<Object>> blah = w.getF();
        List<Object> objects = new ArrayList<Object>();
        objects.add(new DataNode());
        objects.add(new DataNode());

        blah.add(objects);
        w.setF(blah);
        System.out.println(gson.toJson(w));
    }

产量:

{
    "columns":["type","relation"],
    "f": [ [ 
        {"paged_traverse":"localhost/db/data/node/25/paged/traverse/{returnType}{?pageSize,leaseTime}",
        "outgoing_relationships":"localhost/db/data/node/25/relationships/out",
        "data":{},
        "all_typed_relationships":"localhost/db/data/node/25/relationships/all/{-list|\u0026|types}",
        "traverse":"localhost/db/data/node/25/traverse/{returnType}",
        "self":"localhost/db/data/node/25",
        "all_relationships":"localhost/db/data/node/25/relationships/all",
        "property":"localhost/db/data/node/25/properties/{key}",
        "outgoing_typed_relationships":"localhost/db/data/node/25/relationships/out/{-list|\u0026|types}",
        "properties":"localhost/db/data/node/25/properties",
        "incoming_relationships":"localhost/db/data/node/25/relationships/in",
        "incoming_typed_relationships":"localhost/db/data/node/25/relationships/in/{-list|\u0026|types}",
        "extensions":{},
        "create_relationship":"localhost/db/data/node/25/relationships"}}
        ]
    ]
}
4

1 回答 1

3

尝试使用这个:

private List<List<Object>> f = new ArrayList<List<Object>>();

然后f.get(0).get(0)会给你一个“类型”的字符串,然后f.get(0).get(1)会给你一个JsonObject

http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonObject.html

或者,从单独列中的关系数据中返回您需要的内容,而不是整个关系图。

更新:也许你应该只使用 springdata-neo4j。:)

于 2013-03-31T14:29:26.053 回答