Dart 如何从动态嵌套JSON对象中提取所有字符串生成字符串数组
动态JSON全字符串提取实现方案
实现逻辑
通过递归遍历JSON解析后的所有节点,根据节点类型做对应处理:
- 字符串类型节点:直接存入结果数组
- 数组类型节点:遍历所有元素逐一递归处理
- 对象类型节点:遍历所有属性值逐一递归处理
- 其他类型节点(数字、布尔、null等):忽略不处理
代码示例
JavaScript 实现
function extractAllStrings(target) { const res = [] const traverse = (val) => { if (typeof val === 'string') return res.push(val) if (Array.isArray(val)) return val.forEach(traverse) if (typeof val === 'object' && val !== null) return Object.values(val).forEach(traverse) } traverse(target) return res } // 测试验证 const case1 = { "message": { "aaa": ["This is aaa"], "bbb": ["This is bbb"], "ccc": ["This is ccc", "Maybe ddd"] } } console.log(extractAllStrings(case1)) // 输出 ["This is aaa", "This is bbb", "This is ccc", "Maybe ddd"] const case2 = {"message": {"fff": ["This is fff"]}} console.log(extractAllStrings(case2)) // 输出 ["This is fff"] const case3 = {"message": "This is a message"} console.log(extractAllStrings(case3)) // 输出 ["This is a message"]
Python 实现
def extract_all_strings(target): res = [] def traverse(val): if isinstance(val, str): res.append(val) elif isinstance(val, list): for item in val: traverse(item) elif isinstance(val, dict): for v in val.values(): traverse(v) traverse(target) return res # 测试验证 case1 = { "message": { "aaa": ["This is aaa"], "bbb": ["This is bbb"], "ccc": ["This is ccc", "Maybe ddd"] } } print(extract_all_strings(case1)) # 输出 ['This is aaa', 'This is bbb', 'This is ccc', 'Maybe ddd'] case2 = {"message": {"fff": ["This is fff"]}} print(extract_all_strings(case2)) # 输出 ['This is fff'] case3 = {"message": "This is a message"} print(extract_all_strings(case3)) # 输出 ['This is a message']
内容的提问来源于stack exchange,提问作者FeelRightz
相关产品推荐
相关产品推荐

