Java获取Json中的数据

Posted 兔兔那么好吃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java获取Json中的数据相关的知识,希望对你有一定的参考价值。

目录

1.普通元素

2.属性包含大括号  

3.属性包含中括号 [

4.属性中既有中括号包括,又嵌套了大括号


使用com.alibaba.fastjson解析

总结:一个花括号 放进JSONObject一次

           一个中括号 [ 放进JSONArray一次

           获取一次属性调用getXxx一次

1.普通元素

getXxx()直接获取

String jsonString = "'name':'卢本伟','age':24";
JSONObject json = JSON.parseObject(jsonString);
String name = json.getString("name");
int age = json.getIntValue("age");
System.out.println(name);
System.out.println(age);

2.属性包含大括号  

先使用getJSONObject()获取JSONObject对象 , 然后进一步getXxx()解析属性

String jsonString = "'Hero':'name':'Fizz','position':'Mid','charactor':'killer'";
JSONObject jsonObject = JSON.parseObject(jsonString);
JSONObject Hero = jsonObject.getJSONObject("Hero");
String name = Hero.getString("name");
String position = Hero.getString("position");
String charactor = Hero.getString("charactor");
System.out.println(name + "..." + position + "..." + charactor);

3.属性包含中括号 [

先使用getJSONArray()获取JSONArray对象,然后进一步遍历

String jsonString = "'nickNames':['五五开','芦苇','white']";
JSONObject jsonObject = JSON.parseObject(jsonString);
JSONArray nickNames = jsonObject.getJSONArray("nickNames");
for(Object nickName:nickNames)
    System.out.println(nickName);

4.属性中既有中括号包括,又嵌套了大括号

一层层获取即可:先getJSONArray,然后getJSONObject,到了属性,就是getXxx()

String jsonString = "'Honors':['year':2011,'name':'TGA总决赛冠军','year':2013,'name':'S3全球总决赛中国区冠军','year':2013,'name':'S3全球总决赛亚军']";
JSONObject jsonObject = JSON.parseObject(jsonString);
JSONArray honors = jsonObject.getJSONArray("Honors");
for(int i=0; i<honors.size(); i++)
    JSONObject honor = (JSONObject) honors.get(i);
    int year = honor.getIntValue("year");
    String name = honor.getString("name");
    System.out.println(year + "..." + name);

如何从Java Android中的嵌套JSON获取数据

我需要从API获取我的应用程序的信息。问题是API响应是具有以下格式的JSON:

{
   "jsonapi":{
      "data":[
         {
            "id":"id_id",
            "name":{
               "en":"nombre en ingles",
               "es":"nombre en español"
            },
            "company":{
               "id":"id_company",
               "name":"nombre company"
            },
            "city":{
               "id":"id_city",
               "name":{
                  "en":"nombre en ingles ciudad",
                  "es":"nombre en español ciudad"
               }
            },
            "province":{
               "id":"id_province",
               "name":{
                  "en":"nombre en ingles provincia",
                  "es":"nombre en español provincia"
               }
            }
         },
         {
            "id":"id_id2",
            "name":{
               "en":"nombre en ingles 2",
               "es":"nombre en español 2"
            },
            "company":{
               "id":"id_company 2",
               "name":"nombre company 2"
            },
            "city":{
               "id":"id_city 2",
               "name":{
                  "en":"nombre en ingles ciudad 2",
                  "es":"nombre en español ciudad 2"
               }
            },
            "province":{
               "id":"id_province 2",
               "name":{
                  "en":"nombre en ingles provincia 2",
                  "es":"nombre en español provincia 2"
               }
            }
         },
         {
            "id":"id_id 3",
            "name":{
               "en":"nombre en ingles 3",
               "es":"nombre en español 3"
            },
            "company":{
               "id":"id_company 3",
               "name":"nombre company 3"
            },
            "city":{
               "id":"id_city",
               "name":{
                  "en":"nombre en ingles ciudad 3",
                  "es":"nombre en español ciudad 3"
               }
            },
            "province":{
               "id":"id_province 3",
               "name":{
                  "en":"nombre en ingles provincia 3",
                  "es":"nombre en español provincia 3"
               }
            }
         }
      ]
   },
   "city":{
      "latitude":"-333",
      "longitude":"111"
   }
}

我知道从JSON获取信息的唯一方法是使用JSONObject,但如果我做object.getString("name")我会得到什么?因为“名称”属性无处不在。是否有可能做像object.getString("data").getString("name")这样的事情?但如果是这样,我仍然有同样的问题导致内部数据有很多“名称”属性。

当其他JSON中有JSON时,有没有办法获得特定属性?如果是这样,怎么样?

我不确定这可以用GSON完成,我是Android的新手,这是我的学习项目,我几乎不知道如何使用JSONObject和JSONArray,所以请,我迷路了!我需要一些帮助,至少知道这是否可行。

先感谢您!!! :)

答案

您将获得的“名称”值取决于您查询JsonObject的方式。您可以在这里阅读有关JsonObject定义和https://developer.android.com/reference/org/json/JSONObject.html的查询结构的信息

这是一个关于如何从示例JSON中检索特定属性值的快速存根。

JSONObject mainObject = new JSONObject(json_data_in_a_string);
JSONObject jsonAPI = mainObject.getJSONObject("jsonapi");
JSONArray array = (JSONArray)jsonAPI.get("data");

for (int i = 0; i < array.length(); i++) {

    JSONObject childObject = array.getJSONObject(i);
    String id = childObject.getString("id");

    JSONObject name = childObject.getJSONObject("name");
    String name_en= name.getString("en");
    String name_es = name.getString("es");

    JSONObject company = childObject.getJSONObject("company");
    String company_id = company.getString("id");
    String company_name = company.getString("name");

}

您还可以创建POJO以轻松读取JSON中的值。有几种工具可以在线获取如何生成pojo类,验证json等。

这里有一些我用的 -

http://www.jsonschema2pojo.org/

http://jsonviewer.stack.hu/

https://jsonlint.com/

另一答案

这里整个文档是JSONObject,它有一个名为jsonapi的密钥对值,其值为嵌套的JSONObject。获取名为JSONObjectjsonapi

JSONObject jo = (JSONObject) obj;
JSONObject jsonApi = (JSONObject)jo.get("jsonapi");

然后这个JSON对象有一个密钥对值与密钥data,其中包含array of JSON objects

JSONArray array = (JSONArray)jsonAoi.get("data");

现在你可以iterate数组得到JSONObject的每个JSONArray并形成你可以得到你的价值的每个对象,如namecitycompany

另一答案

首先正确解析您的Json并使用以下方法检查它是否正确:

https://jsonlint.com/

稍后为您的json解析创建POJO或Model类:

http://pojo.sodhanalibrary.com/

比使用Gson解析Json:

ResponseData response = gson.fromJson(jsonString, ResponseData.class);

你可以从响应中访问任何值。

我没有使用JsonArray和JsonObject显示基本的Json解析,因为你的json非常嵌套。所以最好使用Gson

以上是关于Java获取Json中的数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Java Android 中的嵌套 JSON 对象获取数据

Java获取Json中的数据

如何从Java Android中的嵌套JSON获取数据

怎样从java后台获取json字符串并转换为json对象输出?

java中json怎么运用?

从java中的Json字符串生成聚合的Json数据