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"
}
}