【发布时间】: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你想要的元素。当然,如果你想要多层的东西,你必须“剥洋葱”才能到达那里。