【问题标题】:JSON parse using GSON [closed]使用 GSON 解析 JSON [关闭]
【发布时间】:2018-07-11 09:32:38
【问题描述】:
    Gson gson = new Gson();
    String jsonInString = "{\"userId\":\"1\",\"userName\":\"Yasir\"}";
    User user= gson.fromJson(jsonInString, User.class);

User.class 有什么用。谁能在该类中清楚地解释只有 getter 和 setter 我需要知道该代码将如何工作?

【问题讨论】:

    标签: java json parsing apache-spark gson


    【解决方案1】:

    它是一个 pojo 类。

    POJO 的意思是“Plain Old Java Object”——它是一个纯数据结构,具有带有 getter 和可能的 setter 的字段,并且可以覆盖来自 Object(例如 equals)或其他一些接口(如 Serializable)的一些方法,但没有以下行为自己的。

    更多详情请参考Advantage of POJO

    【讨论】:

      【解决方案2】:

      假设我们需要使用 JSON 对象并将它们作为 Java 对象加载。假设 Web 服务器在查询时会生成以下 JSON:

      { 名称:“SAHIL”,语言:“Java”,位置:“古尔冈”}

      此 JSON 对象包含三个具有各自值的字段。假设我们需要使用 JSON 对象并创建一个表示该数据的 Java 对象。为了让这个例子更有趣,假设我们只对名称和位置字段感兴趣。

      首先,我们需要创建一个 Java 类,其中包含我们想要表示的字段(名称和位置)。我们称这个类为 Person。此类的名称无关紧要,但字段的名称则无关紧要。字段名称必须与 JSON 中的名称匹配(包括大小写)。此外,该类必须包含一个默认构造函数(即使在此设置为私有)。如下所示,字段名称和位置为 JSON 中的大写。 JSON 字段 P_LANGUAGE 被忽略,因为 Java 对象不包含具有此名称的字段。字段名称不遵循 Java 命名约定是可以理解的,但暂时让我们保持简单。

      public class Person {
          private String NAME;
          private String LOCATION;
      
          **// Getters and setters are not required for this example.
          // GSON sets the fields directly using reflection.**
      
          @Override
          public String toString() {
              return NAME + " - " + LOCATION;
          }
      }
      

      准备好 Java 对象后,我们可以读取 JSON 对象并将它们作为 Java 对象加载,如下所示。为了模拟现实生活中的情况,我们使用字节流作为输入。另请注意,JSON 内容保存到位于资源源文件夹中的文件(通常不是这种情况)中。

      public class JsonToJava {
      
          public static void main(String[] args) throws IOException {
              try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server1.json"), "UTF-8")){
                  Gson gson = new GsonBuilder().create();
                  Person p = gson.fromJson(reader, Person.class);
                  System.out.println(p);
              }
          }
      }
      

      这应该产生以下内容:

      SAHIL - 古尔冈

      Gson 解析 JSON 对象并创建 Person 类的实例,然后将其打印到命令提示符。

      希望这能消除您的疑问,如果仍有疑问,请发表评论,将消除它。

      提前感谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 2012-01-02
        • 1970-01-01
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多