【问题标题】:Traverse and Accessing inner elements in JSON在 JSON 中遍历和访问内部元素
【发布时间】:2020-08-08 08:30:20
【问题描述】:

我有一个嵌套的 JSON 文档,并且想要更新其中的元素。下面是 JSON 文件。 也已通过在线格式化多次验证此 JSON。

{
    "j1": [{
        "URL": "http://localhost/",
        "Data": "{\"dump\":[{values:[{time:1586826385724,val:5.12},{time:1587576460460,val:3.312}]}]}"
    }]
}

在此,我想访问“值”并在后续条目中添加元素名称:ABC 和名称:CBA。

{values:[{name:'ABC',time:1586826385724,val:5.12},
{name:'CBA',time:1587576460460,val:3.312}]}

现在使用以下代码获取字典数据,但不确定如何通过此字典访问样本及其值。

尝试使用 dict 对象

import json
   with open("new1.json") as json_file:
   data = json.load(json_file)
   data['json1'][0]['DownloadData'][0:]

我尝试使用 objectpath 库进行 json 元素遍历但获取空结果集

#trying with objectpath lib
 import json
    import objectpath
    with open("new1.json") as json_file:
    data = json.load(json_file)
    jsonnn_tree = objectpath.Tree(data['json1'])    
    result_tuple = tuple(jsonnn_tree.execute('$..values'))

我明白不应该要求直接代码,但在访问嵌套 JSON/字典时无法找到与此上下文相关的任何内容。作为一个新手,想在这里寻求一些指导。

【问题讨论】:

    标签: python json python-3.x list dictionary


    【解决方案1】:

    对我来说,您在这里似乎有一个嵌套的 JSON 字符串。内部 JSON 无效。所以我们必须在解析之前修复它。

    import json
    with open("new1.json") as json_file:
       data = json.load(json_file)
    innerstr = data["j1"][0]["Data"]
    innerstr = innerstr.replace("values",'"walues"').replace("time",'"time"').replace("val",'"val"').replace("walues","values")
    inner = json.loads(innerstr)
    #then we can modify inner data as we want
    inner["dump"][0]["values"][0]["name"] = "ABC"
    inner["dump"][0]["values"][1]["name"] = "CBA"
    

    现在我们有这样的innervariable

    {'dump': [{'values': [{'name': 'ABC', 'time': 1586826385724, 'val': 5.12},
                          {'name': 'CBA', 'time': 1587576460460, 'val': 3.312}]}]}
    

    【讨论】:

    • 这是一个示例。您能在此处建议修改值吗?
    • 当我将你的 JSON 写入 python 变量时,我需要先避免反弹,然后用它来转义引号。这就是为什么会有双重反弹。
    • 更新一个示例 JSON 是可行的,但要处理的文件很多,同时添加反冲和“”会很困难。有什么方法可以通过代码添加这些吗? str1=data['j1'][0]['Data'][19:108] 使用它作为获取值字符串的解决方法。
    • 好的,这反映了您拥有的真实数据。我更新了我的答案,您可以按原样从文件中读取数据。
    【解决方案2】:

    这是一种宽松的 JSON 格式。有一个A relaxed JSON parser for Python。 示例如下:

    >>> import relaxedjson
    >>> relaxedjson.parse('{moose: "goose"}')
    {'moose': 'goose'}
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      相关资源
      最近更新 更多