我使用gcloud ai-platform predict
调用端点,并使用json-request
而不是json-response
获得如下预测
gcloud ai-platform predict --json-request instances.json
然而,反应不是json
,hense不能被进一步读取,从而导致其他并发症。以下是回应。
VAL HS
0.5 {'hs_1': [[-0.134501, -0.307326, -0.151994, -0.065352, -0.14138]], 'hs_2' : [[-0.134501, -0.307326, -0.151994, -0.065352, 0.020759]]}
gcloud ai-platform predict
是否可以返回json
?
谢谢你的帮助。
显然,您的输出是一个包含标题和两列的表:一个分数和(声称的(JSON内容。您应该提取任何首选数据行的第二列(您的示例只有一列,但通常您可能会收到多个分数JSON对(。也许您的API已经提供了提取某个"状态"的功能,例如得分最高的状态。如果没有,一个简单的awk
或sed
脚本可以很容易地完成这项工作。
然后,在拥有合适的JSON(然后jq
可以查询它(之前,唯一剩下的问题就是引用样式。输出中包含的字段名使用'
而不是"
('lstm_1'
而不是"lstm_1"
(。不幸的是,如果您希望接收任意复杂的JSON数据(例如包含引号的字符串等(,那么纠正瘦并不是一项容易的任务。然而,如果您的JSON看起来总是像所提供的示例中的简单,那么对于awk
或sed
等工具来说,简单地用错误的替换正确的就变得很容易了。
例如,在示例输出中使用sed
来选择第二行(这是第一个数据行(,从开始删除所有内容,直到但不包括第一个大括号(标记第二列的开始(,进行所述替换并将结果管道传输到jq
:
... | sed -n "2{s/^[^{]+//;s/'/"/g;p;q}" | jq .
{
"lstm_1": [
[
-0.13450142741203308,
-0.3073260486125946,
-0.15199440717697144,
-0.06535257399082184,
-0.1413831114768982
]
],
"lstm_2": [
[
-0.13450142741203308,
-0.3073260486125946,
-0.15199440717697144,
-0.06535257399082184,
0.02075939252972603
]
]
}
[编辑以反映评论]
如果你也想利用分数,让jq
来处理。例如:
... | sed -n "2{s/'/"/g;p;q}" | jq -s '{score:first,status:last}'
{
"score": 0.548,
"status": {
"lstm_1": [
[
-0.13450142741203308,
-0.3073260486125946,
-0.15199440717697144,
-0.06535257399082184,
-0.1413831114768982
]
],
"lstm_2": [
[
-0.13450142741203308,
-0.3073260486125946,
-0.15199440717697144,
-0.06535257399082184,
0.02075939252972603
]
]
}
}
[编辑以反映OP的变化]
由于更改只影响名称和值,而不影响结构,因此迄今为止有效的方法仍然有效:
... | sed -n "2{s/'/"/g;p;q}" | jq -s '{val:first,hs:last}'
{
"val": 0.5,
"hs": {
"hs_1": [
[
-0.134501,
-0.307326,
-0.151994,
-0.065352,
-0.14138
]
],
"hs_2": [
[
-0.134501,
-0.307326,
-0.151994,
-0.065352,
0.020759
]
]
}
}