Bet*_*h B 0 coldfusion json replace
这不起作用.json是有效的.我想最终用以下代码替换Distributor_ID:100 Distributor_ID:55.json中可能有任意数量的嵌套项目,并且路径Distributor_ID可能会有所不同.如果它首先被反序列化为一个结构,我将不得不通过路径搜索它并替换它找到的任何地方.我认为既然json是一个字符串,那么一个简单的替换可以快速完成,但是我收到一个错误:
Invalid token " found.
Run Code Online (Sandbox Code Playgroud)
如何用CF快速替换序列化json中的值?引号或撇号是否需要转义?
<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#">
Run Code Online (Sandbox Code Playgroud)
不要在JSON上使用字符串替换函数.JSON不是字符串.
JSON是一种数据结构.这样对待它.
<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)>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |