【问题标题】:How to get a value from gson object by key如何按键从gson对象中获取值
【发布时间】:2014-02-07 19:27:01
【问题描述】:

我一直在尝试遵循这个解决方案How to find specified name and its value in JSON-string from Java?

然而它似乎没有意义。

我从一个字符串中定义了一个新的 gson 对象:

此处的字符串示例:http://api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc

public void convertToJson()
{
    Gson gson = new Gson();
    Object gsonContent = gson.fromJson( stringContent, RadioContent.class );
}

然后尝试返回一个值:

public Object getValue( String find )
{
    return gsonContent.find;
}

最后它被调用:

public static void print( String find = "title" )
{
    Object value = radioContent.getValue( find );

    System.out.println( value );
}

但是我得到一个错误:

java: cannot find symbol
  symbol:   variable find
  location: variable gsonContent of type java.lang.Object

全班: 主班:http://pastebin.com/v4LrZm6k 广播课:http://pastebin.com/2BWwb6eD

【问题讨论】:

  • 首先到 json.org 学习 JSON 语法。 JSON结构有两种类型,“对象”和“数组”。一切都是通过将它们分层构建的。您使用键访问“对象”,而使用数字索引访问“数组”。根据您使用的工具包,“反序列化”JSON 将表示为普通的旧 Java 映射(“对象”)和列表(“数组”)或属于您使用的 JSON 套件的特殊映射/列表类类。 (需要注意的是,JSON“对象”与 Java“对象”不同。)
  • 基本上,我要做的就是获取一个键的值。所以我猜对象是我应该使用的。
  • 将 JSON 解析为 JsonObject 并检索您需要的字段。
  • 检索字段是我一直试图在这里实现的目标。
  • 在一般情况下(不查看传入的 JSON),当您解析 JSON 时,您不知道返回的是对象还是数组。因此,您将使用 instanceof 检查哪个,然后转换为适当的类型。如果您以某种方式“信任”JSON,则可以跳过它并直接解析为对象。无论哪种情况,一旦你有了一个对象(Java Map),你就可以使用适当的键get你想要的元素。当然,如果你想要多层的东西,你必须“剥洋葱”才能到达那里。

标签: java gson


【解决方案1】:

这是Java。字段根据对象引用的声明类型解析。

根据您的编译器错误,gsonContent 是Object 类型的变量。 Object 没有 find 字段。

您已经告诉 Gson 要反序列化为什么类型,所以只需将 gsonContent 变量设为该类型

RadioContent gsonContent = gson.fromJson( stringContent, RadioContent.class );

此外,您似乎正在使用局部变量隐藏实例 gsonContent 字段。


你也可以这样做

JsonObject jsonObject = gson.fromJson( stringContent, JsonObject.class);
jsonObject.get(fieldName); // returns a JsonElement for that name

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多