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


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

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

このようになります