ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2442|回复: 12

json数据,提取指定内容

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-10-24 22:04 | 显示全部楼层 |阅读模式
有文件夹内有很多格式统一的JSON文件,需要用VBA导出指定的数据,谢谢!

json原数据格式

json原数据格式


EXCEL需要提取的内容

EXCEL需要提取的内容



json.rar

9.37 KB, 下载次数: 17

TA的精华主题

TA的得分主题

发表于 2020-10-26 08:21 来自手机 | 显示全部楼层
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
decode_json.py
http://club.excelhome.net/forum.php?mod=viewthread&tid=1560839&mobile=2
https://blog.csdn.net/u013925378/article/details/102742487?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.wap_blog_relevant_pic&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.wap_blog_relevant_pic

python获取某文件夹下所有指定后缀的文件
import json


#打开json文件
result4=json.load(f)
print(result4["infos"][0]["id"])
print(result4["pagination"]["totalRecords"])
"""

import os
import json
path = ".//json"
result =[]
datanames = os.listdir(path)
for dataname in datanames:
    if os.path.splitext(dataname)[1] == '.json':#目录下包含.json的文件
        result.append(dataname)
rows=[]
for file in result:
    print(os.path.join(path,file))
    row=[]
    filepath=os.path.join(path,file)
    #f=open(path+"/"+dataname)
    f=open(filepath)
    result4=json.load(f)
    #print(result4)
   
    cell=result4["seriesId"]
    #print(cell)
   

    row.append(cell)
    #print(row)

    cell=result4["seriesName"]
    #print(cell)
   

    row.append(cell)
    #print(row)
    cell=result4["programs"][0]["movies"][0]["playURL"]
    ##print(cell)
   

    row.append(cell)
    #print(row)
    rows.append(row)
    #print(rows)


    #break

'''
import shutil
filename="json.xlsx"
source=os.path.join(path,filename)
filename="json.xlsx.bsk"
target=os.path.join(path,filename)
shutil.copy(source,target)
import sys
sys.exit()
'''
#将rows写入excel
import openpyxl as op

def op_toexcel(data,filename): # openpyxl库储存数据到excel

    #wb = op.Workbook(filename) # 创建工作簿对象
    #https://openpyxl.readthedocs.io/en/stable/usage.html#read-an-existing-workbook
    wb=op.load_workbook(filename)
    ws = wb['Sheet1'] # 创建子表
    for i in range(len(data)):
        d = data[i]
        print(d)
        ws.append(d) # 每次写入一行
    wb.save(filename)
'''
    print(ws.values)
    range_date=ws.values
    l=[[cell for cell in row] for row in range_date][1:]
    print(l)
'''
data=rows
filename=os.path.join("json","json.xlsx")
op_toexcel(data,filename)

収*O_20201026_081153.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-10-26 18:36 | 显示全部楼层

Private Sub test()
Dim ado As Object, reg As Object
Dim ph$, s$, p$, ary(), i%, j%
Set reg = CreateObject("vbscript.regexp")
Set ado = CreateObject("adodb.stream")
ph = ThisWorkbook.path & "\*.json" '文件目录
p = Dir(ph)
With ado
    .Charset = "Utf-8"
    .Type = 2
    .Mode = 3
End With

i = 0
ReDim Preserve ary(i)
    ary(i) = "seriesId|seriesName|playURL"
While p <> ""
    ado.Open
    ado.LoadFromFile ThisWorkbook.path & "\" & p
    s = ado.ReadText
    i = i + 1
    ReDim Preserve ary(i)
    For j = 0 To 2
        reg.Pattern = Split(ary(0), "|")(j) & ".*""(.*)"","
        ary(i) = ary(i) & reg.Execute(s)(0).SubMatches(0) & "|"
    Next
    ado.Close
    p = Dir
Wend

[a1].Resize(UBound(ary) + 1) = Application.Transpose(ary)
Range("a:a").TextToColumns other:=True, otherchar:="|"
Set reg = Nothing
Set ado = Nothing
End Sub 捕获.PNG

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-29 18:10 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-29 18:17 | 显示全部楼层
简七 发表于 2020-10-26 18:36
Private Sub test()
Dim ado As Object, reg As Object
Dim ph$, s$, p$, ary(), i%, j%

非常感谢,完美解决;

TA的精华主题

TA的得分主题

发表于 2020-10-29 20:59 | 显示全部楼层
简七 发表于 2020-10-26 18:36
Private Sub test()
Dim ado As Object, reg As Object
Dim ph$, s$, p$, ary(), i%, j%

学习了,mark下

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-30 00:14 | 显示全部楼层
这种格式的如何循环解决,文件夹中所有的JSON文件格式是一样的,但是数据数量可能不一样,按着需要的格式导出到EXCEL

原文件格式

原文件格式

JSON 原文件格式



需要的格式

需要的格式

需要转换的格式

json循环.rar (7.49 KB, 下载次数: 13)

TA的精华主题

TA的得分主题

发表于 2020-10-30 08:47 来自手机 | 显示全部楼层
wllnet 发表于 2020-10-30 00:14
这种格式的如何循环解决,文件夹中所有的JSON文件格式是一样的,但是数据数量可能不一样,按着需要的格式导 ...

"bcharging" : 1,
    "bpreview" : 0,
    "movies" : [ {
      "movieId" : "29703952",
      "type" : 2,
      "playURL" : "http://lv1.vcache.cn/vod/enbense02.m3u8",
    } ]
  },

PayURL这行多了一个逗号(,),后面数据没出现,不是标准的json,可在线测试一下。

type" : 2,
      "playURL" : "http://vcache.cn/vod/YANHUA/0729/YANHUA00017227203FIMOV0005529533/20200727132146404f2d6d45b.m3u8",
      "audioType" : 0,
      "closedCaptioning" : 0,
      "duration" : 100,
      "definition" : 2,
      "bitrate" : 500
    } ]
  } ]
}

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-10-30 18:48 | 显示全部楼层
zpy2 发表于 2020-10-30 08:47
"bcharging" : 1,
    "bpreview" : 0,
    "movies" : [ {

谢谢提示,

原有JSON内容比较多,我删除了一部分,

我只是想表达JSON是这种数据格式,

然后通过VBA把数据按着EXCEL格式的要求格式输出就行了;

文件夹中会有很多相同格式的JSON

TA的精华主题

TA的得分主题

发表于 2020-10-31 08:03 来自手机 | 显示全部楼层
wllnet 发表于 2020-10-30 18:48
谢谢提示,

原有JSON内容比较多,我删除了一部分,


原有JSON内容比较多,我删除了一部分,

我只是想表达JSON是这种数据格式,

标准的json 有库支持,否则,需要专门的数据清洗,或者说,你如果给出来的是杂乱无章的文本,会给解析带来巨大的困难。
我觉得你应该不会是每个json 文本打开去删除逗号后面的内容。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 14:50 , Processed in 0.051012 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表