猿问

“预期BEGIN_Object,但在第1列为字符串”

“预期BEGIN_Object,但在第1列为字符串”

我有这样的方法:

public static Object parseStringToObject(String json) {
    String Object = json;
    Gson gson = new Gson();
    Object objects = gson.fromJson(object, Object.class);
    parseConfigFromObjectToString(object);
    return objects;}

我想用以下方法解析一个JSON:

public static void addObject(String IP, Object addObject) {
    try {
        String json = sendPostRequest("http://" + IP + ":3000/config/add_Object", ConfigJSONParser.parseConfigFromObjectToString(addObject));
        addObject = ConfigJSONParser.parseStringToObject(json);
    } catch (Exception ex) {
        ex.printStackTrace();
    }}

但我收到一条错误信息:

JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_Object,但在第1列为String


牧羊人nacy
浏览 662回答 3
3回答

largeQ

即使没有看到JSON字符串,您也可以从错误消息中看出,将其解析为类的实例并不是正确的结构。gson期望您的JSON字符串以打开大括号的对象开始。G.{但是,您传递给它的字符串以一个打开的引号开头。"

繁星淼淼

来自服务器的无效JSON应该始终是预期的用例。在传输过程中,有一百万件事情会出错。GSON有点棘手,因为它的错误输出会给您带来一个问题,您捕获的实际异常将是另一种类型。考虑到所有这些,客户端的正确修复方法是try{   gson.fromJSON(ad, Ad.class);   //...}catch (IllegalStateException | JsonSyntaxException exception){   //...如果您想知道从服务器收到的JSON错误的原因,可以在CATCH块内部查看异常。但是,即使这是你的问题,也不是客户从互联网上收到的修复JSON的责任。无论哪种方式,当它得到坏的JSON时,客户端都有责任决定该做什么。有两种可能性是拒绝JSON,什么也不做,然后再试一次。如果要再次尝试,我强烈建议在try/catch块内设置一个标志,然后在try/catch块之外响应该标志。嵌套TRY/CATCH很可能是gson使我们陷入这种混乱的堆栈跟踪和异常不匹配的原因。换句话说,即使我承认它看起来不太优雅,我还是建议boolean failed = false;try{   gson.fromJSON(ad, Ad.class);   //...}catch (IllegalStateException | JsonSyntaxException exception){   failed = true;   //...}if (failed){   //...
随时随地看视频慕课网APP

相关分类

Java
我要回答