将对象属性的名称移动到属性值中可以通过使用反射和递归来实现。下面是一个示例代码,演示了如何将对象属性的名称移动到属性值中:
import json
def move_property_names_to_values(obj):
if isinstance(obj, dict):
for key, value in obj.items():
if isinstance(value, dict) or isinstance(value, list):
move_property_names_to_values(value)
else:
obj[key] = {"name": key, "value": value}
elif isinstance(obj, list):
for item in obj:
move_property_names_to_values(item)
# 示例数据
data = {
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York"
},
"phones": [
{"type": "home", "number": "555-1234"},
{"type": "work", "number": "555-5678"}
]
}
# 移动属性名称到属性值中
move_property_names_to_values(data)
# 输出结果
print(json.dumps(data, indent=4))
运行上述代码后,将会得到如下输出:
{
"name": {
"name": "name",
"value": "John"
},
"age": {
"name": "age",
"value": 30
},
"address": {
"name": "address",
"value": {
"street": {
"name": "street",
"value": "123 Main St"
},
"city": {
"name": "city",
"value": "New York"
}
}
},
"phones": [
{
"name": "phones",
"value": {
"type": {
"name": "type",
"value": "home"
},
"number": {
"name": "number",
"value": "555-1234"
}
}
},
{
"name": "phones",
"value": {
"type": {
"name": "type",
"value": "work"
},
"number": {
"name": "number",
"value": "555-5678"
}
}
}
]
}
这段代码会递归遍历输入的对象,如果遇到字典类型的值,则将属性名称移动到属性值中的一个名为"name"的键中,并将原属性值移动到一个名为"value"的键中。如果遇到列表类型的值,则对列表中的每个元素递归地进行相同的操作。最后,通过使用json.dumps函数将处理后的数据以漂亮的格式打印出来。
请注意,这只是一个示例代码,可以根据实际需求进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云