递归遍历 JSON 文件,提取选定的字符串

2023-12-07

我需要递归地遍历 JSON 文件(从 API 发布响应),提取以 ["text"] 作为键的字符串{"text":"this is a string"}

我需要开始从元数据中具有最旧日期的源进行解析,从该源中提取字符串,然后移至第二个最旧的源,依此类推。 JSON 文件可能会严重嵌套,并且字符串所在的级别可能会不时发生变化。

问题: 有很多名为 ["text"] 的键,我不需要所有这些键,我只需要那些具有字符串值的键。更好的是,我需要的 "text":"string" 始终位于 a 的同一个对象 {} 中"type":"sentence"。参见图片。

我在问什么

修改下面的第二个代码,以便递归地遍历文件并仅提取 ["text"] 值(当它们与 "type":"sentence" 位于同一对象 {} 中时)。

下面是 JSON 文件的片段(绿色的是我需要的文本和元数据,红色的是我不需要提取的文本):

screenshot of contents of JSON file

完整 JSON 示例的链接:http://pastebin.com/0NS5BiDk

到目前为止我所做的:

1)简单的方法:将json文件转换为字符串并搜索双引号(“”)之间的内容,因为在所有json帖子响应中,我需要的“字符串”是唯一位于双引号之间的内容。然而,这个选项阻止我预先订购资源,因此还不够好。

r1 = s.post(url2, data=payload1)
j = str(r1.json())

sentences_list = (re.findall(r'\"(.+?)\"', j))

numentries = 0
for sentences in sentences_list:
    numentries += 1
    print(sentences)
    print(numentries)

2) 更聪明的方法:递归地遍历 JSON 文件并提取 ["text"] 值

def get_all(myjson, key):
    if type(myjson) is dict:
        for jsonkey in (myjson):
            if type(myjson[jsonkey]) in (list, dict):
                get_all(myjson[jsonkey], key)
            elif jsonkey == key:
                print (myjson[jsonkey])
    elif type(myjson) is list:
        for item in myjson:
            if type(item) in (list, dict):
                get_all(item, key)

print(get_all(r1.json(), "text"))

它提取所有以 ["text"] 作为键的值。不幸的是,在文件中还有其他内容(我不需要)以 [“text”] 作为键。因此它返回我不需要的文本。

请指教。

UPDATE

我编写了 2 个代码来按某个键对对象列表进行排序。第一个按 xml 的“文本”排序。第二个由“包含期间”值组成。

第一个有效,但是一些 XML,即使它们的数量较多,实际上里面的文档比我预期的要早。

对于第二个代码,“包含周期”的格式不一致,有时该值根本不存在。第二个也给了我一个错误,但我不明白为什么 -string indices must be integers.

# 1st code (it works but not ideal)

j=r1.json()

list = []
for row in j["tree"]["children"][0]["children"]:
    list.append(row)

newlist = sorted(list, key=lambda k: k['text'][-9:])
print(newlist)

# 2nd code I need something to expect missing values and to solve the
# list index error
list = []
for row in j["tree"]["children"][0]["children"]:
    list.append(row)

def date(key):
    return dparser.parse((' '.join(key.split(' ')[-3:])),fuzzy=True)

def order(list_to_order):
    try:
        return sorted(list_to_order,
                      key=lambda k: k[date(["metadata"][0]["value"])])
    except ValueError:
        return 0

print(order(list))

我认为这将满足您的要求,只要选择正确的字符串即可。我还更改了类型检查的方式以使用isinstance(),这被认为是更好的方法,因为它支持面向对象的多态性。

import json
_NUL = object()  # unique value guaranteed to never be in JSON data

def get_all(myjson, kind, key):
    """ Recursively find all the values of key in all the dictionaries in myjson
        with a "type" key equal to kind.
    """
    if isinstance(myjson, dict):
        key_value = myjson.get(key, _NUL)  # _NUL if key not present
        if key_value is not _NUL and myjson.get("type") == kind:
            yield key_value
        for jsonkey in myjson:
            jsonvalue = myjson[jsonkey]
            for v in get_all(jsonvalue, kind, key):  # recursive
                yield v
    elif isinstance(myjson, list):
        for item in myjson:
            for v in get_all(item, kind, key):  # recursive
                yield v    

with open('json_sample.txt', 'r') as f:
    data = json.load(f)

numentries = 0
for text in get_all(data, "sentence", "text"):
    print(text)
    numentries += 1

print('\nNumber of "text" entries found: {}'.format(numentries))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归遍历 JSON 文件,提取选定的字符串 的相关文章

  • AttributeError:“函数”对象没有属性“编译”

    我一直面临这个属性错误 有什么想法可以解决它吗 def model input shape model keras Sequential model add keras layers LSTM 64 input shape 1 9 retu
  • 如何在 Pandas 中用多个唯一字符串替换重复值?

    import pandas as pd import numpy as np data Name Tom Tom Jack Terry Age 20 21 19 18 df pd DataFrame data 假设我有一个如下所示的数据框
  • 尝试将行附加到按对象分组中的每个组时出现奇怪的行为

    这个问题是关于一个函数在应用于两个不同的数据帧时以意想不到的方式表现的 更准确地说 是 groupby 对象 要么是我遗漏了一些明显错误的东西 要么是 pandas 中存在错误 我编写了以下函数 将一行附加到 groupby 对象中的每个组
  • WCF JSON 输出添加了不需要的引号和反斜杠

    好吧 所以我很困惑为什么我正在构建的字符串 神奇地 添加了额外的字符 首先 我看到反斜杠出现在立即窗口中 ID 1 F1 lala F2 hehe ID 2 F1 abc F2 def 但是在谷歌上读到这些只是 视觉 并且实际上并不存在于变
  • 如何在Tensorflow中读取json文件?

    我正在尝试编写一个函数 用于读取张量流中的 json 文件 json 文件具有以下结构 bounding box y 98 5 x 94 0 height 197 width 188 rotation yaw 27 970195770263
  • Node.js -Firebase 服务帐户私钥无法解析

    I use env我的 app js 文件中的变量用于访问密钥 一切都工作正常 直到我下载了一个新的Firebase Service Account Private Key 当我用新值替换旧值时 我无法再访问该密钥 因为terminal当我
  • 在Python中绘制像素的最佳方法[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想知道 用 x 和 y 值在 python 中绘制像素的最简单方法是什么 可能最简单的方法是使用PIL http effbot org i
  • 视频的 EXIF 之类的东西

    有没有从视频文件中获取信息的标准方法 对于图像 我们有 EXIF 数据 可用于获取有关图像文件的日期 时间 大小等信息 我想知道视频是否也有这样的东西 用例是 我有很多用数码相机拍摄的视频 我想将它们重命名为更有意义的名称 例如 YYYY
  • OSMNX - 边缘的哪个“部分”被认为是最近的

    我正在使用 OSMNX 中的 returned edges 函数 我不清楚在进行此计算时使用边缘的哪个 部分 它是边缘的任何部分吗 是中间点吗 对于网络中的长边来说 这会产生很大的差异 这取决于您如何参数化该函数 来自nearest edg
  • 用零向左填充字符串[重复]

    这个问题在这里已经有答案了 我见过类似的问题here https stackoverflow com questions 388461 padding strings in java and here https stackoverflow
  • 从 paramiko 获取 PID

    我找不到一个简单的答案 我正在使用 paramiko 远程登录并执行多个进程 我需要每个进程的 PID 以便稍后检查它们 paramiko 中似乎没有函数来获取执行命令的 PID 所以我尝试使用以下命令 stdin stdout stder
  • 缓存 pandas 数据框的最佳方法?

    昨天 我经历了惨痛的教训 将 pandas 数据帧保存到 csv 以供以后使用是一个坏主意 我有一个包含 130k 条推文的数据框 其中数据框的一行是list的推文 当我将数据保存到 CSV 然后重新加载数据帧时 数据帧的行现在是字符串类型
  • 我可以使用对象(类的实例)作为 Python 中的字典键吗?

    我想使用类实例作为字典键 例如 classinstance class dictionary classinstance hello world Python似乎无法将类作为字典键处理 还是我错了 另外 我可以使用像 classinstan
  • 在 C 中使用相等运算符 == 比较两个字符串是否相等 [重复]

    这个问题在这里已经有答案了 int main int argc argv if argv 1 hello printf True n else printf False n myProg hello False 为什么 我意识到strcmp
  • 如何使用 Python 从 URL 中删除查询字符串

    Example http example com a text q2 text2 q3 text3 q2 text4 删除后 q2 它将返回 http example com q text q3 text3 在这种情况下 出现了多个 q2
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • Python Blowfish 加密

    由于我对 Java 的了解不完整 我正在努力将此加密代码转换为 Python 代码 两者应该得到完全相同的结果 帮助将不胜感激 Java函数 import javax crypto Cipher import javax crypto sp
  • 从 NumPy、matplotlib 包导入 python 子模块有什么区别[重复]

    这个问题在这里已经有答案了 当我尝试使用时pyplot from matplotlib import matplotlib print matplotlib pyplot just checking 它给了我AttributeError m
  • .NET 中的字符串格式:将整数转换为固定宽度字符串?

    我在 NET C 中有一个 int 我想将其转换为特定格式的字符串 如果值为 1 我希望字符串为 001 10 010 116 116 etc 我正在寻找字符串格式 但到目前为止没有成功 我的值也不会超过 999 最简单的方法是使用 NET
  • Android Systrace 没有这样的文件或目录

    这是错误消息 D Programming Tools ADT bundle sdk platform tools systrace gt python systrace py Traceback most recent call last

随机推荐

  • 使用 UIWebView 上传照片

    我想直接从 UIWebView 上传照片 该视图具有用于文件上传的 HTML 表单 当我单击按钮时 我会看到拍照或选择现有照片的选项 但是当我单击这两个选项中的任何一个时 我得到 警告 尝试呈现
  • 在Python中定义名称

    我很困惑为什么我的程序不起作用 我应该使用嵌套的 if 来询问人们的姓名和头衔 医生 女性 男性 然后打印出女士姓名 先生姓名或医生姓名 如果有人知道我遇到的问题 请回复 name input Enter your name title i
  • 从不寻常的 svn 目录结构迁移到 maven?

    与 正常 svn 目录结构相反 我使用以下结构 trunk project1 project2 project3 branches project1 branch project1 project2 project2 branch proj
  • DatePicker 无法在 ajax 加载的页面中工作

    我将日期选择器附加到全局脚本文件中的输入 如下所示 document on focusin datePick function this datepicker dateFormat dd mm yy changeMonth true cha
  • 查询网格内的点 Maya python api

    我试图找出一种计算世界空间点是否位于任意网格内部的方法 如果它不是立方体或球体 我不太确定如何计算它的数学 任何帮助都会很棒 人们可以使用一种简单的光线追踪技巧来测试您是在形状的内部还是外部 事实证明 2D 3D 对象甚至可能更高维度的对象
  • 表 [表名] 未锁定

    我正在编写一个锁定表的 MySQL 查询 LOCK TABLE table 1 WRITE 之后 我正在执行一些函数 并且在其中一个函数中 我正在另一个未锁定的表上执行另一个查询 SELECT FROM completely differe
  • 可以将其作为 SQL Server 作业吗?

    我有一个文件夹 其中包含用于使用徽章的图像 我有另一个文件夹 其中包含图像的重命名版本 该文件夹位于另一台计算机上 我需要创建一个过程来复制和重命名找到的任何新图像 名称之间的映射位于 SQL Server DB 中 将其创建为 SQL S
  • 使用 CMake 检测 Qt5

    我正在尝试在 Ubuntu 上安装和使用 Qt 5 为我的需要 Qt 5 的项目运行 CMake 会导致 The C compiler identification is GNU 4 8 4 The CXX compiler identif
  • 确保 epmd 已启动

    我有一个 eunit 测试 它生成唯一的节点名称并开始分发 A B C now Nodename list to atom lists flatten io lib format test b b b localhost A B C ok
  • 在 Macos 上安装 xampp 的 mongodb 扩展

    我找了一晚上 也没找到解决办法 我尝试通过运行来安装 mongodb 扩展sudo Applications XAMPP xamppfiles bin pecl install mongodb但最后我得到这个错误 fatal error u
  • 选择表数据到数组 - 仅获取一行

    我正在尝试从表中获取数据EmailList并将其放入一个数组中 该数组将被传递到 Outlook 电子邮件的 收件人 字段 电子邮件的脚本已创建 我计划使用Join 函数将数组组合成字符串 如下所示 Join varEmailList My
  • 如何修复 Python 中的 unicode/cPickle 错误?

    ids cPickle loads gem value loads argument 1 must be string not unicode cPickle loads想要一个字节字符串 这正是cPickle dumps输出 然后你给它提
  • MongoDB:如何查询 json 字符串?

    有一个 MongoDB 集合 其中填充了如下文档 id ObjectId 5b7f83b591fae49715443590 content n t email email protected n t country code US n 如你
  • SOLR 在第一个方面查询时很慢,但在以后的查询中相当快

    我试图找出为什么我的 SOLR 4 1 实例对于方面查询非常慢 索引大约有200M文档 服务器有64GB RAM 我的查询如下所示 q CampaignId 1462 0ASourceDateUtc 2014 01 01T00 00 00
  • Backbone collection.create() 不返回更新后的模型

    为了学习骨干 我创建了一个类似 Twitter 的应用程序 所以你知道 Twitter 每隔 N 秒向服务器发送一个 GET 请求来检查新推文 如果有新的推文 它会创建隐藏的推文li元素并显示带有 N 个新推文 的按钮 如果你点击它 它会显
  • AngularJS:使用具有多个模型的设备

    我有一个 Rails 应用程序 使用具有 2 个不同模型的设计 对应于截然不同的角色 没有 STI 完全不同的模型 我计划转向 AngularJS 前端 想知道构建应用程序的最佳方式是什么 以下是我的初步想法 每个用户模型都有不同的基本登录
  • 在c#中将两个具有不同元素的列表合并为一个具有所有元素和相同索引的列表

    我有两个不同的列表geocode1 and geocode2均为 5 行记录 geocode1有 4 列 即地址 城市 邮政编码和街道 geocode2有 4 列 即纬度 经度 状态和县 使用 addrange 合并它们 如下所示 geoc
  • 在 tcsh 中生成序列号列表

    我一直在尝试找到一种解决方法来在 tcsh 中广泛定义序列号列表 即 而不是做 i 1 2 3 4 5 6 8 9 10 我想做这样的事情 知道它不起作用 i 1 10 这在 foreach 循环中特别有用 我知道我可以使用 while 只
  • RequireJS 如何处理多个页面和部分视图?

    我正在调查要求JS但我对有些事情不确定 我了解如何加载所有依赖项main js 但是我是否需要添加任何逻辑来处理这些依赖项main js To me main js看起来像一个 document ready 状态 当文档加载时你就在那里输入
  • 递归遍历 JSON 文件,提取选定的字符串

    我需要递归地遍历 JSON 文件 从 API 发布响应 提取以 text 作为键的字符串 text this is a string 我需要开始从元数据中具有最旧日期的源进行解析 从该源中提取字符串 然后移至第二个最旧的源 依此类推 JSO