我在我的一个项目中使用JSON。例如,我有JSON结构。
{
"address":{
"streetAddress": {
"aptnumber" : "21",
"building_number" : "2nd",
"street" : "Wall Street",
},
"city":"New York"
},
"phoneNumber":
[
{
"type":"home",
"number":"212 555-1234"
}
]
}
现在我有一堆使用这种结构的模块,它希望在收到的json中看到某些字段。对于上面的示例,我有两个文件:address_manager和phone_number_manager。每个人都会传递相关信息。所以address_manager会期望一个包含键'streetAddress'和'city'的字典。
我的问题是:是否可以设置一个常量结构,以便每次我更改JSON结构中字段的名称(例如,我想将'streetAddress'更改为'address')时,我不会必须在几个地方做出改变?
我天真的方法是拥有一堆常数(例如
ADDRESS = "address"
ADDRESS_STREET_ADDRESS = "streetAddress"
..等等..
)如果我想在JSON结构中更改我的一个字段的名称,我只需要在一个地方进行更改。然而,这似乎是非常低效的,因为一旦我到达JSON结构的第三层或第四层(例如ADDRESS_STREETADDRESS_APTNUMBER,ADDRESS_STREETADDRESS_BUILDINGNUMBER),我的常命命名将非常长(
我在python中这样做,但任何通用的答案都可以。 感谢。
答案 0 :(得分:1)
就像Cameron Sparr在评论中提到的那样,不要让你的常量名称包括你的JSON结构的所有级别。如果您在多个位置拥有相同的数据,那么如果您重复使用相同的常量,它实际上将更好。例如,假设您的JSON在地址中包含电话号码:
{
"address": {
"streetAddress": {
"aptnumber" : "21",
"building_number" : "2nd",
"street" : "Wall Street"
},
"city":"New York",
"phoneNumber":
[
{
"type":"home",
"number":"212 555-1234"
}
]
},
"phoneNumber":
[
{
"type":"home",
"number":"212 555-1234"
}
]
}
为什么不在两个地方都使用一个常量PHONES = 'phoneNumber'
?您的常量将具有较短的名称,并且它在逻辑上更连贯。您最终会像这样使用它(假设JSON存储在person
中):
person[ADDRESS][PHONES][x] # Phone numbers associated with that address
person[PHONES][x] # Phone numbers associated with the person
而不是
person[ADDRESS][ADDRESS_PHONES][x]
person[PHONE_NUMBERS][x]
答案 1 :(得分:0)
您可以编写一个脚本,而不是更改常量时,更改所有json文件中的结构。
示例:
import json
CHANGE = ('steet', 'streetAddress')
json_data = None
with open('file.json') as jfile:
json_data = jfile.load(jfile)
json_data[CHANGE[1]], json_data[CHANGE[0]] = json_data[CHANGE[0]], None