代码之家  ›  专栏  ›  技术社区  ›  Hearen

gson无法解除json lize它实现了什么json?

  •  -2
  • Hearen  · 技术社区  · 7 年前
    public static String toJsonString(Object obj) {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }
    

    使用此方法 杰森利泽 然后用这个 德杰森利泽

    Gson gson = new Gson();
    gson.fromJson(this.getThreadDumpVoJson(), ThreadDumpVo.class);
    

    一切都很好,直到我添加了一个新字段 ThreadDumpVo

    Map<StackStatePair, Integer> traceStatePairSortedSizeGroup;
    

    然后 Exception 抛出如下:

    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1540 path $.traceStatePairSortedSizeGroup. 
    

    这个 StackStatePair 定义如下:

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class StackStatePair {
        String callStack;
        String state;
    }
    

    以前我试着用 import javafx.util.Pair; 但这也引发了同样的问题,这里发生了什么?

    我不能用 混合成的 钥匙?

    "traceStatePairSortedSizeGroup": {
    "StackStatePair(callStack\u003dDeadLoopThread.lambda$createBusyThread$0(DeadLoopThread.java:7)|DeadLoopThread$$Lambda$1/2080166188.run(Unknown Source)|java.lang.Thread.run(Thread.java:748), state\u003dRUNNABLE)": 1,
    "StackStatePair(callStack\u003djava.lang.Object.wait(Native Method)|java.lang.Object.wait(Object.java:502)|java.lang.ref.Reference.tryHandlePending(Reference.java:191)|java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153), state\u003dWAITING)": 1,
    "StackStatePair(callStack\u003djava.lang.Object.wait(Native Method)|java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)|java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)|java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209), state\u003dWAITING)": 1
     }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Reaz Murshed vir us    7 年前

    不,如果使用gson解析json,则不能使用这种组合键。密钥本身不是json字符串,这使得它不能使用gson进行解析。它只能被解析为字符串。

    这不是 traceStatePairSortedSizeGroup . 如果它是一个数组,那么我们可以将字符串存储到 String 然后我们可以解析数组中的值。这就是为什么你有 JsonSyntaxException .

    如果有机会修改json主体,那么我建议您修改它以保持简单。