忘掉Java。您需要首先了解JSON格式。
基本上就是这样
object {} { members }members pair pair , memberspair string : valuearray [] [ elements ]elements value value , elementsvalue string number object array true false null您的第二个JSON
String(缺少
")如下(使用jsonlint.com格式化)
{ "created_at": "Sat Feb 08 15:37:37 +0000 2014", "id": "432176397474623489", "user": { "id_str": "366301747", "name": "somethingClever", "screen_name": "somethingCoolAndClever" }}JSON是一个对象external
{},它包含三对,created_at这是JSON字符串,
id也是JSON字符串,并且
user是JSON对象。该JSON对象包含另外三对都是JSON字符串。
你问
我如何将这些内部括号中指定的值分配给变量?
最高级的JSON解析/生成库旨在将JSON转换为Pojos并返回。
因此,您可以将JSON格式映射到Java类。
class Pojo { @SerializedName("created_at") private String createdAt; private String id; private User user;}class User { @SerializedName("id_str") private String idStr; private String name; @SerializedName("screen_name") private String screenName;}// with appropriate getters, setters, and a toString() method请注意,
@SerializedName以便您可以继续对字段使用Java命名约定。
您现在可以反序列化JSON
Gson gson = new Gson();Pojo pojo = gson.fromJson(jsonInput2, Pojo.class);System.out.println(pojo);
会打印
Pojo [createdAt=Sat Feb 08 15:37:37 +0000 2014, id=432176397474623489", user=User [idStr=366301747, name=somethingClever, screenName=somethingCoolAndClever]]
显示所有字段均已正确设置。
谁能向我解释,或向我展示代码,Gson如何处理此类事情以及如何使用?
Gson的源代码可免费获得。您可以在线找到它。这很复杂,源代码解释在这里不适合。简而言之,它使用
Class您提供的对象来确定如何映射JSON对。它查看相应类的字段。如果这些字段是其他类,则它将重复进行,直到构造出需要反序列化的所有内容的映射为止。
简而言之,为什么…打印为空?
因为您的根JSON对象没有与name配对
name。代替使用
Map,使用Gson的
JsonObject类型。
JsonObject jsonObject = new Gson().fromJson(jsonInput2, JsonObject.class);String name = jsonObject.get("user") // get the 'user' JsonElement .getAsJsonObject() // get it as a JsonObject .get("name") // get the nested 'name' JsonElement .getAsString(); // get it as a StringSystem.out.println(name);哪个打印
somethingClever
如果上述方法类不是正确的类型,则可能引发了许多异常。例如,如果我们做了
String name = jsonObject.get("user") // get the 'user' JsonElement .getAsJsonArray() // get it as a JsonArray它将失败,因为
user它不是JSON数组。具体来说,它会抛出
Exception in thread "main" java.lang.IllegalStateException: This is not a JSON Array. at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106) at com.spring.Example.main(Example.java:19)
因此
JsonElement类(这是父类的
JsonObject,
JsonArray和其他几个人)提供了一些方法来检查它是什么。参见javadoc。



