Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用GSON解释和读取JSON_Java_Json_Gson - Fatal编程技术网

Java 用GSON解释和读取JSON

Java 用GSON解释和读取JSON,java,json,gson,Java,Json,Gson,我很难理解这个JSON字符串 { "results":[ { "user":{ "gender":"female", "name":{ "title":"miss", "first":"taylor", "last":"anderson"

我很难理解这个JSON字符串

{
    "results":[
        {
            "user":{
                "gender":"female",
                "name":{
                    "title":"miss",
                    "first":"taylor",
                    "last":"anderson"
                },
                "location":{
                    "street":"3645 dogwood ave",
                    "city":"roseburg",
                    "state":"new hampshire",
                    "zip":"20963"
                },
                "email":"taylor.anderson49@example.com",
                "username":"heavyduck595",
                "password":"liverpool",
                "salt":"UK`o;9a_",
                "md5":"6c8db0305b4591d8d9820d9f8edfd162",
                "sha1":"906df4c09f3a87899666cb57bf974bd9b1950ea6",
                "sha256":"3b12f5e51688578f845bef8ae1750d3e263c2010691010a80ce632a6b2323c03",
                "registered":"1359027425",
                "dob":"16243995",
                "phone":"(934)-888-7068",
                "cell":"(727)-467-8384",
                "SSN":"697-20-6143",
                "picture":"http://api.randomuser.me/0.3/portraits/women/30.jpg"
            },
            "seed":"5eaf02877746c7e",
            "version":"0.3"
        }
    ]
}
这是我第一次真正使用JSON,并希望尝试对其进行适当的解释。这是我迄今为止的代码:

static class Results{
            String results;
        }

        static class User{
            String gender;
            String name;
            String location;
            List<Results> items;
        }


        private static String readUrl(String urlString) throws Exception {
            BufferedReader reader = null;
            try {
                URL url = new URL(urlString);
                reader = new BufferedReader(new InputStreamReader(url.openStream()));
                StringBuffer buffer = new StringBuffer();
                int read;
                char[] chars = new char[1024];
                while ((read = reader.read(chars)) != -1)
                    buffer.append(chars, 0, read); 

                return buffer.toString();
            } finally {
                if (reader != null)
                    reader.close();
            }
        }

        public void larry() throws Exception{
            String json = readUrl("http://api.randomuser.me/");
            System.out.println(json);
            Gson gson = new Gson();        
            User page = gson.fromJson(json, User.class);

            System.out.println(page.name);
            for (Results item : page.items)
              System.out.println("    " + item.results);
        }
静态类结果{
字符串结果;
}
静态类用户{
字符串性别;
字符串名;
字符串位置;
清单项目;
}
私有静态字符串readUrl(字符串urlString)引发异常{
BufferedReader reader=null;
试一试{
URL=新URL(URL字符串);
reader=newbufferedReader(newInputStreamReader(url.openStream());
StringBuffer=新的StringBuffer();
int-read;
char[]chars=新字符[1024];
while((read=reader.read(chars))!=-1)
追加(字符,0,读取);
返回buffer.toString();
}最后{
if(读卡器!=null)
reader.close();
}
}
public void()引发异常{
字符串json=readUrl(“http://api.randomuser.me/");
System.out.println(json);
Gson Gson=新的Gson();
User page=gson.fromJson(json,User.class);
System.out.println(第页名称);
用于(结果项:第页。项)
System.out.println(“+item.results”);
}

JSON并没有什么特别复杂的地方,也并没有把它映射到您自己的Java类。你只需要了解基本结构

JSON是一个只有一个字段的对象<代码>结果。这就是
{}
的意思:

{ "results": ... }
该字段包含一个数组。这就是
[]

{ "results": [ ... ] }
该数组包含另一个对象(可能一个数组中有多个对象,但您发布的JSON只有一个)。该对象有三个字段,其中一个(“用户”)保存另一个对象,另外两个为字符串

要将其映射到您自己的类,只需使它们看起来像JSON:

class JsonResult {
    List<Result> results; // JSON arrays map to Java Lists
}

class Result {
     User user;
     String seed;
     String version;
}

class User {
    String gender;
    Name name;
    // and so on ...
}

class Name {
    String title;
    String first;
    String last;
}
从这里,您可以使用字段名访问JSON结构:

JsonObject root = element.getAsJsonObject();
JsonArray array = root.getAsJsonArray("results");

通过访问JSON结构,您可以访问任何您想要的内容。

其他用于打印缩进的内容,您可以使用“\t”作为制表符,而不是“.等多个空格”。在执行任何其他操作之前,请访问JSON.org,花5分钟时间学习JSON语法——它非常简单,易于理解。然后,在使用诸如GSON之类的工具直接生成自定义Java对象之前,使用一个“干净”的JSON解析器将JSON解析为映射和列表,并学习如何处理这些映射和列表。那么,GSON等人的复杂性就更容易理解了。(谷歌的“JSON在线解析器”——有几种在线工具可以检查JSON字符串的语法并对其进行格式化,使其更易于阅读。)@Hot Licks谢谢!那会有很大帮助。
JsonObject root = element.getAsJsonObject();
JsonArray array = root.getAsJsonArray("results");