lugar na corda json com Coldfusão
Isto não funciona. O json é válido. Gostaria, eventualmente, de substituir qualquer
Distributor_ID
: 100 por Distributor_ID
: 55. Pode haver qualquer número de itens aninhados no json e o caminho para Distributor_ID
pode variar. Se fosse deserializado para uma estrutura Primeiro, eu teria que procurá-lo por caminho e substituir em todos os lugares que foi encontrado. Pensei que uma vez que o json é uma string, então um simples substituto poderia fazê-lo rapidamente, mas eu tenho um erro:
Invalid token " found.
Como substituir rapidamente um valor em JSON serializado? com CF? Uma citação ou apóstrofo precisa ser escapada?
<cfset jsonstring= '"SUPPLY": [
{
"SRole_ID": 1,
"Distributor_ID": 100,
"Test": "E974564E-B252-148D-E6FD5EF429885236"
},
{
"SRole_ID": 1,
"Distributor_ID": 100,
"Test": "EC08B56C-95BE-0DCA-DD7789978A05D788"
},
{
"SRole_ID": 1,
"Distributor_ID": 13,
"Test": "EC0BA1FB-F6A7-29E3-CC92FD509BCD487C"
},
{
"SRole_ID": 1,
"Distributor_ID": 15,
"Test": "EC0FEC88-018E-CCEA-668038434E83A4E7"
}
]'>
<cfset newjson = ReplaceNoCase(jsonstring, 'Distributor_ID": 100', 'Distributor_ID": 50', "ALL")>
<cfdump var="#newjson#">
0
Author: Matt Busche, 2014-04-10
1 answers
Não use funções de substituição de texto no JSON. O JSON não é uma corda.
O JSON é uma estrutura de dados. Trata-o como tal.
<cfset jsonstring = '{
"SUPPLY": [
{
"SRole_ID": 1,
"Distributor_ID": 100,
"Test": "E974564E-B252-148D-E6FD5EF429885236"
},
{
"SRole_ID": 1,
"Distributor_ID": 100,
"Test": "EC08B56C-95BE-0DCA-DD7789978A05D788"
},
{
"SRole_ID": 1,
"Distributor_ID": 13,
"Test": "EC0BA1FB-F6A7-29E3-CC92FD509BCD487C"
},
{
"SRole_ID": 1,
"Distributor_ID": 15,
"Test": "EC0FEC88-018E-CCEA-668038434E83A4E7"
}
]
}'>
<cfset data = DeserializeJSON(jsonstring)>
<cfloop array="#data.SUPPLY#" index="item">
<cfset item["Distr"] = item["Distributor_ID"]>
<cfset StructDelete(item, "Distributor_ID")>
</cfloop>
<cfset newjson = SerializeJSON(data)>
6
Author: Tomalak, 2014-04-10 13:40:45