JSON Modify
Modifying JSON Data Using KeyPath
KeyPath access in JSON is a way to access nested properties of an object using dot notation (.). Hodor uses dots to separate KeyPath into a group of property names, and then retrieves values based on these property names. KeyPath also supports array access using [index] or [*], where index refers to a specific array index and * acts as a wildcard.
Example Usage
We will provide a sample JSON data for better understanding. The sample data is as follows:
{
"detail": {
"sessionId": 88888888,
"hasVIP": false,
"authList": [{
"name": "Adam",
"startTime": 1581609600000
}, {
"name": "Andrew",
"startTime": 1581609600000
}]
},
"result": {
"code": "ok",
"updateTime": 1667573961226
}
}
1. Modifying data in a deeply nested dictionary
How can we change the value of code in result to "error"?
Since this is a dictionary access, the KeyPath can be set as result.code and the value can be set as "error". You can choose either string or auto as the data type (auto converts the data to its original data type). The resulting JSON will be:
{
"detail" : {
"authList" : [{
"name" : "Adam",
"startTime" : 1581609600000
},
{
"name" : "Andrew",
"startTime" : 1581609600000
}],
"sessionId" : 88888888,
"hasVIP" : false
},
"result" : {
"code" : "error",
"updateTime" : 1667573961226
}
}
2. Modifying the value of an element in an array
How can we replace the value of the second name in authList with "AAAAA"?
Since authList is an array, and both ends are dictionaries, the KeyPath can be set as detail.authList[1].name and the value can be set as "AAAAA". You can choose either string or auto as the data type (auto converts the data to its original data type). The resulting JSON will be:
{
"detail" : {
"sessionId" : 88888888,
"hasVIP" : false,
"authList" : [{
"name" : "Adam",
"startTime" : 1581609600000
},
{
"name" : "AAAAA",
"startTime" : 1581609600000
}]
},
"result" : {
"updateTime" : 1667573961226,
"code" : "ok"
}
}
3. Modifying the value of all elements in an array
How can we replace the value of all name in authList with "AAAAA"?
Since authList is an array, the KeyPath can be set as detail.authList[*].name and the value can be set as "AAAAA". You can choose either string or auto as the data type (auto converts the data to its original data type). The resulting JSON will be:
{
"detail" : {
"authList" : [{
"name" : "AAAAA",
"startTime" : 1581609600000
},
{
"name" : "AAAAA",
"startTime" : 1581609600000
}],
"hasVIP" : false,
"sessionId" : 88888888
},
"result" : {
"updateTime" : 1667573961226,
"code" : "ok"
}
}
4. Modifying a bool type
How can we change hasVIP to true?
The KeyPath can be set as detail.hasVIP and the value can be set as true. You can choose either bool or auto as the data type (auto converts the data to its original data type). The resulting JSON will be:
{
"detail" : {
"authList" : [{
"name": "Adam",
"startTime": 1581609600000
},
{
"name": "Andrew",
"startTime": 1581609600000
}],
"hasVIP" : true,
"sessionId" : 88888888
},
"result" : {
"updateTime" : 1667573961226,
"code" : "ok"
}
}
5. Replacing a dictionary with another dictionary
How can we replace result with another dictionary?
In this case, the KeyPath can be set as result and the value can be set as {"a" : 1,"b" : "ok"}. You should choose dictionary as the data type (Hodor will convert the provided string to a dictionary during the replacement process). The resulting JSON will be:
{
"detail": {
"sessionId": 88888888,
"hasVIP": false,
"authList": [{
"name": "Adam",
"startTime": 1581609600000
}, {
"name": "Andrew",
"startTime": 1581609600000
}]
},
"result" : {
"a" : 1,
"b" : "ok"
}
}