python - 自定义Python JSON object_hook

标签 python json python-3.x

我正在尝试在 Python 3 中使用 object_hook 自定义 json 数据,但不知道如何开始。非常感谢任何指点。我正在尝试引入一个新 key 并将现有数据移动到 Python 对象中的新 key 中。

我正在尝试转换以下 json 文本:

{
  "output": [
    {
      "Id": "101",
      "purpose": "xyz text",
      "array": [
        {
          "data": "abcd"
        },
        {
          "data": "ef gh ij"
        }
      ]
    },
    {
      "Id": "102",
      "purpose": "11xyz text",
      "array": [
        {
          "data": "abcd"
        },
        {
          "data": "java"
        },
        {
          "data": "ef gh ij"
        }
      ]
    }
  ]
}

{
  "output": [
    {
      "Id": "101",
      "mydata": {
        "purpose": "xyz text",
        "array": [
          {
            "data": "abcd"
          },
          {
            "data": "ef gh ij"
          }
        ]
      }
    },
    {
      "Id": "102",
      "mydata": {
        "purpose": "11xyz text",
        "array": [
          {
            "data": "abcd"
          },
          {
            "data": "java"
          },
          {
            "data": "ef gh ij"
          }
        ]
      }
    }
  ]
}

我的 Python JSON 对象 Hook 定义为:

class JSONObject:
    def __init__( self, dict ):
        vars(self).update( dict )

    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, 
            sort_keys=True, indent=4)

最佳答案

您可以指定自定义object_pairs_hook(input_json 是包含输入 JSON 的字符串)。

def mydata_hook(obj):
    obj_d = dict(obj)
    if 'Id' in obj_d:
        return {'Id': obj_d['Id'], 'mydata': {k: v for k, v in obj_d.items() if 'Id' not in k}}
    else:
        return obj_d

print(json.dumps(json.loads(input_json, object_pairs_hook=mydata_hook), indent=2))

输出:

{
  "output": [
    {
      "mydata": {
        "array": [
          {
            "data": "abcd"
          }, 
          {
            "data": "ef gh ij"
          }
        ], 
        "purpose": "xyz text"
      }, 
      "Id": "101"
    }, 
    {
      "mydata": {
        "array": [
          {
            "data": "abcd"
          }, 
          {
            "data": "java"
          }, 
          {
            "data": "ef gh ij"
          }
        ], 
        "purpose": "11xyz text"
      }, 
      "Id": "102"
    }
  ]
}

关于python - 自定义Python JSON object_hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53326350/

相关文章:

python - Sqlalchemy:查询多态类的 m2m 关系

json - 在 Go 中聚合 JSON 对象

python - 如何将元组转换为命名元组?

javascript - 对变量的 JSON 调用的结果

json - 使用 JavaScript 函数而不是 URL 来填充 Flexigrid

python - 有没有办法从 dict 和 collections.abc.MutableMapping 一起子类化?

python - 将数据帧的行与同一组合并并将值分配给新列

python - 了解切片

python - 在 mysql JSON 字段的 cursor.execute() 中使用 '.format()' 与 '%s',使用 Python mysql.connector,

Python - 如何仅使用变量使用 dict() 函数?