如何在R中创建含嵌套列表的JSON文件并解决fromJson解析错误
如何创建可被R正确解析的嵌套结构JSON文件
问题背景
尝试创建一个JSON文件,要求第三个元素为包含子列表的嵌套列表结构,但使用R的fromJson(txt = 'example_json.json')读取时出现解析错误,提示数组元素格式不符合要求。
错误的JSON代码
{ "list1": [ "element1" ], "list2": [ "element2" ], "List_with_lists_as_elements": [ "Child1":{ "Name": "Child1", "Child1_Title": [ "Title1", "Title2", "Title3"] , "Child1_Subtitle": [ "Subtitle_1", "Subtitle_2", "Subtitle_3" ] }, "Child2":{ "Name": "Child2", "Child2_Title": [ "Title1", "Title2", "Title3"] , "Child2_Subtitle": [ "Subtitle2_1", "Subtitle2_2", "Subtitle2_3" ] }, "Child3":{ "Name": "Child3", "Child2_Title": [ "Title1", "Title2", "Title3"] , "Child2_Subtitle": [ "Subtitle3_1", "Subtitle3_2", "Subtitle3_3" ] } ] }
报错信息
Error in parse_con(txt, bigint_as_char) : parse error: after array element, I expect ',' or ']' _as_elements": [ "Child1":{ "Name": "Child1", (right here) ------^
问题原因与修正方案
核心错误
JSON语法中,数组(用[]包裹)的元素只能是值类型(比如字符串、数字、对象、数组等),不能直接使用键值对("Child1": {...})。你错误地在数组内部使用了对象的键值对结构,导致解析失败。
修正方案1:将外层改为对象(保留Child标识)
如果需要保留Child1/Child2这类命名标识,把List_with_lists_as_elements的外层从数组[]改为对象{},这样每个Child就是对象的键值对,符合JSON语法:
{ "list1": [ "element1" ], "list2": [ "element2" ], "List_with_lists_as_elements": { "Child1": { "Name": "Child1", "Child1_Title": [ "Title1", "Title2", "Title3" ], "Child1_Subtitle": [ "Subtitle_1", "Subtitle_2", "Subtitle_3" ] }, "Child2": { "Name": "Child2", "Child2_Title": [ "Title1", "Title2", "Title3" ], "Child2_Subtitle": [ "Subtitle2_1", "Subtitle2_2", "Subtitle2_3" ] }, "Child3": { "Name": "Child3", "Child2_Title": [ "Title1", "Title2", "Title3" ], "Child2_Subtitle": [ "Subtitle3_1", "Subtitle3_2", "Subtitle3_3" ] } } }
修正方案2:使用数组结构(无外部Child键)
如果确实需要数组形式的嵌套列表,将每个子项作为独立对象放入数组,把Child1这类名称作为对象内部的属性:
{ "list1": [ "element1" ], "list2": [ "element2" ], "List_with_lists_as_elements": [ { "Name": "Child1", "Titles": [ "Title1", "Title2", "Title3" ], "Subtitles": [ "Subtitle_1", "Subtitle_2", "Subtitle_3" ] }, { "Name": "Child2", "Titles": [ "Title1", "Title2", "Title3" ], "Subtitles": [ "Subtitle2_1", "Subtitle2_2", "Subtitle2_3" ] }, { "Name": "Child3", "Titles": [ "Title1", "Title2", "Title3" ], "Subtitles": [ "Subtitle3_1", "Subtitle3_2", "Subtitle3_3" ] } ] }
验证解析
将修正后的JSON保存为文件,用R执行以下代码即可正常解析:
library(jsonlite) result <- fromJson("example_json.json") str(result) # 查看嵌套结构
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

