使用ColdFusion重新放置在json字符串上

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)

Tom*_*lak 6

不要在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)