如何避免Pandas to_json()将列表包裹在单引号中
解决Series转JSON数组时带多余引号的问题
这个问题我之前也碰到过,核心原因是to_json(orient='values')返回的是字符串形式的JSON数组,直接放进字典里的话,最终输出时它就会被当成普通字符串,带着额外的引号,自然会给解析带来麻烦。给你两个简单的解决思路:
方法一:直接将Series转为Python列表再序列化
这是最直接高效的方式,pandas的Series可以通过.tolist()方法直接转为原生Python列表,之后再用标准库的json.dumps()把整个字典序列化为JSON字符串,这样生成的JSON里的数组就是真正的JSON数组,没有多余引号。
示例代码:
import json import pandas as pd # 假设df是你的目标DataFrame output_json = {} output_json['count_time_fitness_timeseries'] = { 'x': df.fitness_date.tolist(), 'y': df.minutes_fitness.tolist(), 'labels': df.minutes_fitness_hhmm.tolist() } # 生成最终的JSON字符串 final_json = json.dumps(output_json) print(final_json)
方法二:解析to_json的结果为Python对象
如果你一定要用to_json方法,可以先用它生成JSON字符串,再通过json.loads()把字符串解析为Python列表,这样字典里存储的就是列表而非字符串,最终序列化时就能得到正确的JSON数组。
示例代码:
import json import pandas as pd output_json = {} output_json['count_time_fitness_timeseries'] = { 'x': json.loads(df.fitness_date.to_json(orient='values')), 'y': json.loads(df.minutes_fitness.to_json(orient='values')), 'labels': json.loads(df.minutes_fitness_hhmm.to_json(orient='values')) } final_json = json.dumps(output_json) print(final_json)
小提示
方法一比方法二更高效,因为它省去了“转JSON字符串→解析回Python对象”的额外步骤,推荐优先使用第一种方案。
内容的提问来源于stack exchange,提问作者cphill
相关产品推荐
相关产品推荐

