来自Json和toJson的Gson用于在Java中返回null的简单对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自Json和toJson的Gson用于在Java中返回null的简单对象相关的知识,希望对你有一定的参考价值。

问候我是新来的和Java,非常感谢您的建议。我正在使用gson-2.3.1,当我调用toJson或fromJson时,我意外地返回null。我是在一个更复杂的对象上尝试这个,所以我在这里用https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples用户指南回到基础。下面的代码几乎完全被复制,编译但是对我来说无法在返回的情况下返回null。只有字符串文字的情况才有效。建议非常感谢,谢谢!

    //an object
    class BagOfPrimitives {
        private int value1 = 1;
        private String value2 = "abc";
        private transient int value3 = 3;
        BagOfPrimitives() {
            // no-args constructor
        }
    }

    // (Serialization)
    BagOfPrimitives obj = new BagOfPrimitives();
    Gson expgson2 = new Gson();
    String json = expgson2.toJson(obj);
    // here json in null - expected was the string below
    String expectedjson = "{"value1":1,"value2":"abc"}";

    // (Deserialization)
    BagOfPrimitives obj2 = expgson2.fromJson(expectedjson, BagOfPrimitives.class);
    // result is obj2 is null and not the object expected
答案

我发现了这个问题。上面的所有代码都在一个方法中,所以我在一个编译器允许的类中声明了类BagofPrimitives所以我认为它没问题。记住我是Java新手,还在学习。一旦我将BagofPrimitives移到它所属的位置,代码就可以了。

另一答案

虽然Ocean的上述答案是正确的,但我只想说问题出在文档上。看看guide,看起来BagOfPrimitives的内部阶级完全没问题,但实际上它甚至都不受支持。完整工作和非工作代码如下。请注意,两者都编译没有错误。

Works

package com.mypackage;
import com.google.gson.Gson;

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;

  BagOfPrimitives() {
  }
}

public class Trials {

  public static void main(String[] args) {
    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    System.out.println(json);
  }
}

Output

{"value1":1,"value2":"abc"}

Doesn't work:

package com.mypackage;
import com.google.gson.Gson;

public class Trials {

  public static void main(String[] args) {

    class BagOfPrimitives {

      private int value1 = 1;
      private String value2 = "abc";
      private transient int value3 = 3;

      BagOfPrimitives() {
      }
    }

    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    System.out.println(json);
  }
}

Output

null

以上是关于来自Json和toJson的Gson用于在Java中返回null的简单对象的主要内容,如果未能解决你的问题,请参考以下文章

Java 中 Gson的使用

Android JSON数据解析(GSON方式)

Gson toJson(),奇怪的行为(产生空的 json)

对于基本类型整数,JSONCompareResult不适用于GSON。为什么?

Gson toJson 返回 JSON 字符串而不是 JSON 对象

json解析之gson