Android中如何获取JSON对象内的动态子对象列表
从foo对象中读取动态子对象列表的方法
首先你提供的JSON示例存在语法错误,末尾的{...}不属于合法的JSON对象结构,正确的foo对象应该是所有子元素都以键值对形式存在,比如:
{ "foo": { "foo1": { "end": 12, "start": 0 }, "foo2": { "end": 7, "start": 0 }, "foo3": { "end": 12, "start": 8 } } }
接下来针对不同主流编程语言,给出具体实现方式:
JavaScript
在JS中,你可以通过Object.values()直接提取对象的所有值,得到子对象的数组:
// 假设已解析后的JSON对象为data const fooObj = data.foo; const dynamicSubObjects = Object.values(fooObj); // 此时dynamicSubObjects就是包含所有子对象的列表 console.log(dynamicSubObjects);
如果需要同时获取键名和子对象,用Object.entries():
const subObjectEntries = Object.entries(fooObj); // 每个元素是[key, value]数组,比如["foo1", {end:12, start:0}]
Python
Python中可以通过字典的.values()方法获取所有子对象:
import json # 解析JSON字符串 json_str = '''{"foo": {"foo1": {"end":12,"start":0}, "foo2": {"end":7,"start":0}, "foo3": {"end":12,"start":8}}}''' data = json.loads(json_str) foo_obj = data["foo"] dynamic_sub_objects = list(foo_obj.values()) # dynamic_sub_objects就是子对象列表 print(dynamic_sub_objects)
要同时获取键和值的话,用.items():
sub_object_items = list(foo_obj.items())
Java
在Java中,可以用JSONObject(比如org.json库)的values()方法:
import org.json.JSONObject; public class Main { public static void main(String[] args) { String jsonStr = "{\"foo\": {\"foo1\": {\"end\":12,\"start\":0}, \"foo2\": {\"end\":7,\"start\":0}, \"foo3\": {\"end\":12,\"start\":8}}}"; JSONObject data = new JSONObject(jsonStr); JSONObject fooObj = data.getJSONObject("foo"); // 获取所有子对象的集合,可转为列表 java.util.Collection<Object> dynamicSubObjects = fooObj.values(); java.util.List<Object> subObjectList = new java.util.ArrayList<>(dynamicSubObjects); // 遍历输出 for (Object obj : subObjectList) { System.out.println(obj.toString()); } } }
核心逻辑都是:提取foo对象后,获取其所有值的集合,转为列表即可,因为foo里的动态子对象本质是对象的属性值,只要拿到所有值就得到了子对象列表。
内容的提问来源于stack exchange,提问作者Mayur
相关产品推荐
相关产品推荐

