Если эта строка JSON будет сериализована в Hash
в какой-то момент в вашем приложении или в другой сторонней зависимости вашего кода (то есть для использования вашими коллегами или модулями), я предлагаю договориться с нимипреобразовать значение цены из String
в Numeric
по требованию, когда json уже равен Hash
, поскольку это более эффективно, и позволяет им ...
... обрабатывать край-случай, где, скажем, "price": ""
, из которого мой код ниже не будет работать, так как он уберет ""
и будет синтаксической ошибкой JSON.
Однако, если вы это сделаетене можете контролировать это, или делаете однократную мутацию для всех данных json, тогда можете попробовать ниже?
json =
<<-eos
{
"data": [{
"name": "ABC",
"price": "2.50",
"somethingsomething": {
"data": [{
"name": "DEF",
"price": "3.25", "someprop1": "hello",
"someprop2": "world"
}]
},
"somethinggggg": {
"price": "123.45" },
"something2222": {
"price": 9.876, "heeeello": "world"
}
}]
}
eos
new_json = json.gsub /("price":.*?)"(.*?)"(.*?,|})/, '\1\2\3'
puts new_json
# =>
# {
# "data": [{
# "name": "ABC",
# "price": 2.50,
# "somethingsomething": {
# "data": [{
# "name": "DEF",
# "price": 3.25, "someprop1": "hello",
# "someprop2": "world"
# }]
# },
# "somethinggggg": {
# "price": 123.45 },
# "something2222": {
# "price": 9.876, "heeeello": "world"
# }
# }]
# }
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не эксперт по регулярным выражениям.