解析json,判断json串中各种元素的数量,并生成csv文件

本文介绍如何使用Python解析JSON字符串,统计其中各种元素(如对象、数组等)的数量,并将结果保存到CSV文件中。通过示例代码,展示了从处理CSV特殊字符到生成最终CSV文件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来的csv文件,里面的数据类型简单展示,(由于csv文件会按逗号分列,所以在原数据上做处理,把","变成了"/",但是在python处理时要重新转换回来)。

代码如下

​
import json
import csv
import pandas as pd
from collections import Counter
dic={}
a=[]


def flatten(jsonObj, result):
    # 判断是否是字典
    
    
    if isinstance(jsonObj, dict):
        for key in jsonObj:
            if key=='id':
                continue
            # value是数组
            elif isinstance(jsonObj[key], list):
                # 数组元素
            
                if len(jsonObj[key]) > 0:
                    if isinstance(jsonObj[key][0], dict):
                        flatten(jsonObj[key], result)
                    else:
                        
                        try:
                            result.append(key + ':' + str(jsonObj[key]))
                        except BaseException:
                            print('错误')
                        else:
                            continue
                else:
                    continue
            # value是字典
            elif isinstance(jsonObj[key], dict):
                flatten(jsonObj[key], result)
            else:
                try:
                
                    result.append(key + ':' + str(jsonObj[key]))
                except BaseException:
                    print('错误')
                else:
                    continue
    # 如果是数组
    else:
        for item in jsonObj:
            flatten(item, result)
def parse(fpath):
    
    result=[]
    
    with open(fpath, newline='') as csvfile:
        next(csvfile)
        reader = csv.reader(csvfile, delimiter=',',quotechar='"')
        for row in reader:
            
            #print(type(row[1]))
            #return 0
            try:
                flatten(json.loads(row[1].replace('/',',')),result)  #因为csv文件会将英文逗号左右的数据分成两列,所以在数据下载时,我把英文逗号换成了'/',所以在python解析时要换回来

            except BaseException:
                print('错误')
            else:
                continue
    return result

def counter(arr):
    return Counter(arr)

        

arr=parse(r'C:\Users\wzywangzhongyuan_i\Desktop\jsonfile\jsonfenjie\job_id=12015451_dir\job_id=12015451ab.csv')
my_dict=counter(arr)

my_df=pd.DataFrame.from_dict(my_dict, orient='index')
my_df.to_csv(r'C:\Users\wzywangzhongyuan_i\Desktop\jsonfile\jsonddd.csv', sep='\t', header=True, index=True,encoding='utf-8')

​

得到的结果(这里没有选择用csv文件打开,而是用notepad打开的,但它是一个csv文件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值