0

我需要改变这个:

{"input":{"text":"HI"},"output":{"text":["OK1","TWO"]}}

进入这个:

{
  "localDB": [
    {
      "tableName": "Default",
      "mode": "append",
      "data": [
        {
          "time": "1511281401.991815",
          "message": "HI",
          "from": "me"
        },
        {
          "time": "1511281401.991837",
          "message": "OK1"
          "from": "bot"
        }
        {
          "time": "1511281401.991847",
          "message": "TWO"
          "from": "bot"
}
]}]}

有可能吗?

这里的关键问题是 localDB 中的“记录”数量应根据.output.text 节点中的条目数量而有所不同。可能只有一个文本,或者三个或更多。

我试过这个,但它不是很有效:

{
 "localDB" : [{
   "tableName": "Default",
   "mode": "append",
   "data": [
     {"time" : now|tostring, "message" : .input.text, "from" : "me"},
     {"time" : now|tostring, "message" :.output.text, "from" : "bot"}
  ]
 }]
}
4

1 回答 1

0

我觉得你很亲近。您只需要使用.output.text[]和利用成员表达式返回多个结果时对象构造的行为方式。试试这个:

{
 "localDB" : [{
   "tableName": "Default",
   "mode": "append",
   "data": [
     {"time" : now|tostring, "message" : .input.text,   "from" : "me"},
     {"time" : now|tostring, "message" :.output.text[], "from" : "bot"}
  ]
 }]
}

样本输出

{
  "localDB": [
    {
      "tableName": "Default",
      "mode": "append",
      "data": [
        {
          "time": "1511283566.11608",
          "message": "HI",
          "from": "me"
        },
        {
          "time": "1511283566.116094",
          "message": "OK1",
          "from": "bot"
        },
        {
          "time": "1511283566.116094",
          "message": "TWO",
          "from": "bot"
        }
      ]
    }
  ]
}

在线尝试!


这是一个过滤器,它使用一个settime函数为行分配不同的时间:

def settime: reduce range(length) as $i (.; .[$i].time = (now + $i|tostring));
{
 "localDB" : [{
   "tableName": "Default",
   "mode": "append",
   "data": [
     {"message" : .input.text,   "from" : "me"},
     {"message" :.output.text[], "from" : "bot"}
   ] | settime
 }]
}

样本输出

{
  "localDB": [
    {
      "tableName": "Default",
      "mode": "append",
      "data": [
        {
          "message": "HI",
          "from": "me",
          "time": "1511285948.684203"
        },
        {
          "message": "OK1",
          "from": "bot",
          "time": "1511285949.684243"
        },
        {
          "message": "TWO",
          "from": "bot",
          "time": "1511285950.684261"
        }
      ]
    }
  ]
}

在线尝试!

于 2017-11-21T17:01:27.197 回答