You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Retrofit和RxJava读取嵌套JSON对象遇到问题

嘿,我懂处理嵌套JSON时那种卡壳的感觉——尤其是层级一多,很容易搞不清怎么精准定位到想要的字段。我来给你拆解下你拿到的这个响应结构,再用几种常用语言举实操例子,帮你顺利搞定数据读取~

先拆解你的JSON结构

你拿到的是一个数组,数组里包含一个对象,这个对象有两个核心部分:

  • 直接字段:num_id(数值类型)
  • 嵌套对象:row,里面包含了地址、网站、地铁信息等所有业务字段
Python 读取示例

Python里用json模块解析后,就能像操作普通列表和字典一样访问嵌套字段:

import json

# 假设response_text是服务器返回的原始JSON字符串
response_text = '''[ 
  { 
    "num_id": 1, 
    "row": { 
      "coord_shirota": "59.932723", 
      "www": "www.anichkov.ru", 
      "metro": "Гостиный Двор", 
      "description": "Старейшее здание на Невском проспекте, императорская резиденция", 
      "address_manual": "Санкт-Петербург, Невский просп., 39 лит. А", 
      "obj_history": "", 
      "oid": "3285", 
      "work_time": "пн-сб 10:00-18:00", 
      "ogrn": "2147483647123", 
      "metro_distance": "584.0", 
      "phone": "123456789"
    } 
  } 
]'''

# 把JSON字符串转成Python可操作的列表/字典
data = json.loads(response_text)

# 读取外层的num_id
num_id = data[0]['num_id']
print(f"编号: {num_id}")

# 读取row里的具体字段,比如地址和网站
address = data[0]['row']['address_manual']
website = data[0]['row']['www']
print(f"地址: {address}")
print(f"官网: {website}")
JavaScript 读取示例

不管是浏览器端还是Node.js,用JSON.parse解析后,通过点语法或者方括号语法就能访问嵌套字段:

// 假设response是服务器返回的原始JSON字符串
const response = `[ 
  { 
    "num_id": 1, 
    "row": { 
      "coord_shirota": "59.932723", 
      "www": "www.anichkov.ru", 
      "metro": "Гостиный Двор", 
      "description": "Старейшее здание на Невском проспекте, императорская резиденция", 
      "address_manual": "Санкт-Петербург, Невский просп., 39 лит. А", 
      "obj_history": "", 
      "oid": "3285", 
      "work_time": "пн-сб 10:00-18:00", 
      "ogrn": "2147483647123", 
      "metro_distance": "584.0", 
      "phone": "123456789"
    } 
  } 
]`;

// 解析JSON为JS对象
const data = JSON.parse(response);

// 读取外层的num_id
const numId = data[0].num_id;
console.log(`编号: ${numId}`);

// 读取row里的描述和地铁信息
const description = data[0].row.description;
const metro = data[0].row.metro;
console.log(`建筑描述: ${description}`);
console.log(`临近地铁: ${metro}`);
避坑小技巧

处理嵌套JSON最容易踩的坑就是字段缺失或者数组为空导致报错,给你两个实用小技巧:

  1. 安全访问字段
    • Python里用get()方法,即使字段不存在也不会报错,还能设置默认值:
      # 安全获取电话字段,不存在则返回"未提供"
      phone = data[0].get('row', {}).get('phone', '未提供')
      print(f"电话: {phone}")
      
    • JavaScript里用可选链操作符?.,配合||设置默认值:
      // 安全获取电话字段,不存在则返回"未提供"
      const phone = data[0]?.row?.phone || '未提供';
      console.log(`电话: ${phone}`);
      
  2. 先判断数组是否为空
    如果服务器返回的数组可能没有元素,一定要先判断长度,避免访问data[0]时报错:
    if len(data) > 0:
        # 再进行后续的字段读取操作
        pass
    
    if (data.length > 0) {
        // 再进行后续的字段读取操作
    }
    

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:13:35