У меня есть JSON строку, преобразованную из VDF (Valve Format Data) с регулярным выражением, как это:JSON объект регулярное выражение и слияние
{"items_game": {
"prefabs": {
...
"coupon_crate_prefab": {
"prefab": "weapon_case_base",
"item_type": "coupon_crate",
"attributes": {
"cannot trade": "1"
},
"capabilities": {
"can_delete": "0"
},
"attributes": {
"expiration date": {
"attribute_class": "expiration_date",
"force_gc_to_generate": "1",
"use_custom_logic": "expiration_period_days_from_now",
"value": "2"
}
}
},
"coupon_key_prefab": {
"prefab": "csgo_tool",
"item_type": "coupon_key",
"attributes": {
"cannot trade": "1"
},
"capabilities": {
"can_delete": "0"
},
"attributes": {
"expiration date": {
"attribute_class": "expiration_date",
"force_gc_to_generate": "1",
"use_custom_logic": "expiration_period_days_from_now",
"value": "2"
}
}
}
...
}
}
Wanted результат:
"coupon_key_prefab": {
"prefab": "csgo_tool",
"item_type": "coupon_key",
"attributes": {
"cannot trade": "1",
"expiration date": {
"attribute_class": "expiration_date",
"force_gc_to_generate": "1",
"use_custom_logic": "expiration_period_days_from_now",
"value": "2"
}
},
"capabilities": {
"can_delete": "0"
}
}
Как вы можете видеть, есть дубликаты attributes
, и мне нужно объединить их, потому что это недействительно в JSON.
Как я могу это сделать? (Возможно, с preg_replace)
Просто из любопытства, что происходит, когда вы десериализуете объект? Вы также должны отметить свой язык программирования, поскольку regex не решит вашу проблему, вам, скорее всего, придется обратиться к структуре данных в вашем коде. Кроме того, в зависимости от языка вы используете поведение сериализации, может быть разным. –
@MikeBrant, после десериализации существуют только последние атрибуты. Да, я использую PHP. –
Что касается вашей последней линии, не прыгайте на предвыборной площадке preg_replace. Это действительно ** никогда не рекомендуется использовать regexp для манипулирования json, поскольку он оставляет вас открытым для атак, особенно если ваш источник взломан. JSON - это кодировка с четко определенной и _context sensitive_ структурой. Если вам не удастся испортить структуру или ввести плохие данные, вы можете быть уверены, что хакер найдет способ. – Phil