IBM Watson ConversationでコンテキストのJSONを操作したいとき

More than 1 year has passed since last update.

会話の最中に以下のコンテキストを保持していたとして

{

"context": {
...
"complex_object": {
"user_firstname" : "Paul",
"user_lastname" : "Pan"
"has_card" : false
}
}
}

ノードからこのようなコンテキストのアップデートをかけられたとします

{

"complex_object": {
"user_firstname": "Peter",
"has_card": true
}
}

すると結果は

{

"complex_object": {
"user_firstname": "Peter",
"user_lastname": "Pan",
"has_card": true
}
}

過去に持っていた値を保持しつつ、アップデートで該当する値は上書きされます


配列への値の追加

このtoppings_arrayという配列に値を追加したい場合

{

"context": {
"toppings_array": ["onion", "olives"]
}
}

このようなメソッドが使えます

{

"context": {
"toppings_array": "<? $toppings_array.append('ketchup', 'tomatoes') ?>"
}
}

contextに含まれるtoppings_arrayを$toppings_arrayというリストオブジェクトとして扱っています

そこからappendメソッドを呼び出しています

その結果

{

"context": {
"toppings_array": ["onion", "olives", "ketchup", "tomatoes"]
}
}

このようになります


配列から値を削除

remove(key)かremoveValue(value)で行えます

{

"context": {
"toppings_array": "<? $toppings_array.remove(0) ?>"
}
}

{

"context": {
"toppings_array": "<? $toppings_array.removeValue('onion') ?>"
}
}

結果はどちらも

{

"context": {
"toppings_array": ["olives", "ketchup", "tomatoes"]
}
}

このようになります