java提取json嵌套多层的数据

本文通过一个具体的JSON实例,详细介绍了如何使用Java的json-lib库进行JSON数据的解析与提取,包括错误状态、城市信息及指数详情的获取,适合初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

json实例: 

{
    "error": 0,
    "status": "success",
    "results": [
        {
            "currentCity": "青岛",
            "index": [
                {
                "title": "穿衣",
                "zs": "较冷",
                "tipt": "穿衣指数",
                "des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
                },
                {
                "title": "紫外线强度",
                "zs": "中等",
                "tipt": "紫外线强度指数",
                "des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
                }
            ]
        }
    ]
}

 

获取方式如下:

package cn.et.test;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @aouhor YangHuiLiang
 * @create 2019/6/28
 */
public class Test {
    public static void main(String[] args) {

        String s = "{\"error\":0,\"status\":\"success\",\"results\":[{\"currentCity\":\"青岛\",\"index\":[{\"title\":\"穿衣\",\"zs\":\"较冷\",\"tipt\":\"穿衣指数\",\"des\":\"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。\"},{\"title\":\"紫外线强度\",\"zs\":\"最弱\",\"tipt\":\"紫外线强度指数\",\"des\":\"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。\"}],}]}";

        JSONObject jsonObject = JSONObject.fromObject(s);

        //提取出error为 0
        int error = jsonObject.getInt("error");
        System.out.println("error:" + error);

        //提取出status为 success
        String status = jsonObject.getString("status");
        System.out.println("status:" + status);

        //注意:results中的内容带有中括号[],所以要转化为JSONArray类型的对象
        JSONArray result = jsonObject.getJSONArray("results");

        for (int i = 0; i < result.size(); i++) {
            //提取出currentCity为 青岛
            String currentCity = result.getJSONObject(i).getString("currentCity");
            System.out.println("currentCity:" + currentCity);

            //注意:index中的内容带有中括号[],所以要转化为JSONArray类型的对象
            JSONArray index = result.getJSONObject(i).getJSONArray("index");

            for (int j = 0; j < index.size(); j++) {
                String title = index.getJSONObject(j).getString("title");
                System.out.println("title:" + title);
                String zs = index.getJSONObject(j).getString("zs");
                System.out.println("zs:" + zs);
                String tipt = index.getJSONObject(j).getString("tipt");
                System.out.println("tipt:" + tipt);
                String des = index.getJSONObject(j).getString("des");
                System.out.println("des:" + des);

            }
        }
    }
}

运行效果:

 

注意需要添加json依赖:

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

 

### Java 处理嵌套 JSON 示例代码 在Java中处理多层嵌套JSON结构可以通过使用`org.json`库来实现。下面是一个具体的例子,展示了如何创建并解析复杂的嵌套JSON对象。 #### 创建嵌套 JSON 对象 ```java import org.json.*; public class JsonExample { public static void main(String[] args) { // 构建顶层 JSON 对象 JSONObject outerObject = new JSONObject(); // 添加简单字段到外层对象 outerObject.put("name", "John Doe"); outerObject.put("age", 30); // 构造内层地址对象 JSONObject address = new JSONObject(); address.put("street", "123 Main St."); address.put("city", "Anytown"); // 将地址对象作为 value 放入外层对象的一个 key 中 outerObject.put("address", address); System.out.println(outerObject.toString()); } } ``` 这段程序会构建如下所示的 JSON 字符串[^1]: ```json { "name": "John Doe", "age": 30, "address": { "street": "123 Main St.", "city": "Anytown" } } ``` #### 解析嵌套 JSON 对象 当接收到上述形式的 JSON 数据时,可以按照以下方式对其进行解析: ```java import org.json.JSONObject; // 假设已有一个表示整个文档的 String 类型变量 jsonString String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"address\":{\"street\":\"123 Main St.\",\"city\":\"Anytown\"}}"; try { // 把字符串转换成 JSONObject 实例 JSONObject jsonObject = new JSONObject(jsonString); // 获取简单的属性 String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); // 访问内部的对象成员 JSONObject addrObj = jsonObject.getJSONObject("address"); // 进一步访问更深层次的数据项 String street = addrObj.getString("street"); String city = addrObj.getString("city"); } catch (JSONException e) { e.printStackTrace(); } ``` 此部分代码演示了如何通过调用 `getJSONObject()` 方法深入遍历至下一层级,并从中提取所需的信息[^4]。 对于更加复杂的情况,比如不确定键名或是存在数组的情况下,则可能需要用到迭代器或者其他辅助工具来进行动态解析[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值