Extension::JsonForEachString Method


dim reformatted_json as c = extension::Json::ForEachString(json as C, expression as C [, fields as C])



A JSON string.


An Xbasic expression used to format the value of fields in the JSON string.


Default = "" (all fields). A comma delimited list of fields to process. If not specified, all fields are processed.



Returns the processed JSON.


For each string in json, evaluate the expression to 'replace' the string.


The ForEachString() method can be used to process every string in a JSON object using an expression. The expression can be used to replace values in the JSON.

This method is similar to the Xbasic *for_each() function, except that it is designed to operate on property values in a JSON string.

For example:

dim json as c = <<%str%
    "name" : "name Smith " ,
    "alias" : [ "jj " , "name " ] ,
    "id"     : {
        "name" : "name_01 "

Notice that the string 'name' appears in the above JSON as both a property name and also in a property value.

We want to change 'name' to 'John', without changing the names of any of the property values. Also, note that each property value has trailing spaces.

' change 'name' to 'John'

json = extension::json::ForEachString(json,"strtran(value,'name','John')")

'trim trailing spaces from each property value
json = extension::json::ForEachString(json,"trim(value)")


    "name" : "John Smith" ,
    "alias" : [ "jj" , "John" ] ,
    "id" : {
        "name" : "John_01"

Notice that none of the property names were changed.

To restrict what properties are changed, a comma delimited list of field names can be passed in as the third argument to the ForEachString() method. For example, in the script below, only the 'name' fields are updated:

' only process fields called 'name':
? extension::JSON::ForEachString(json, "strtran(value,'name','John')","name")
= {
    "name" : "John Smith " ,
    "alias" : [ "jj " , "name " ] ,
    "id"     : {
        "name" : "John_01 "