gcloud ai平台预测的非json输出.正在分析非json输出



我使用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已经提供了提取某个"状态"的功能,例如得分最高的状态。如果没有,一个简单的awksed脚本可以很容易地完成这项工作。

然后,在拥有合适的JSON(然后jq可以查询它(之前,唯一剩下的问题就是引用样式。输出中包含的字段名使用'而不是"('lstm_1'而不是"lstm_1"(。不幸的是,如果您希望接收任意复杂的JSON数据(例如包含引号的字符串等(,那么纠正瘦并不是一项容易的任务。然而,如果您的JSON看起来总是像所提供的示例中的简单,那么对于awksed等工具来说,简单地用错误的替换正确的就变得很容易了。

例如,在示例输出中使用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
]
]
}
}

相关内容

  • 没有找到相关文章

最新更新