【发布时间】:2022-10-17 23:29:52
【问题描述】:
我面临一个问题。我有这个 json 日志
{
"log": "Log Info : { \"datetime\" : \"datetime\", \"field1\" : \"value1\", \"field2\" : \"value2\", \"field3\" : \"value3\", \"field4\" : \"value4\", \"field5\" : \"value5\", \"field6\" : \"value6\", \"field7\" : \"value7\", \"field8\" : \"value8\", \"field9\" : \"value9\", \"field10\" : \"value10\", \"field11\" : \"value11\"}\n",
"stream": "stdout",
"kubernetes": {
"pod_name": "pod_name",
"namespace_name": "namespace_name",
"pod_id": "pod_id",
"host": "host",
"container_name": "container_name",
"docker_id": "docker_id",
"container_hash": "container_hash",
"container_image": "container_image"
}
}
我需要获取“log”键中的所有字段。这些字段会增加,所以我需要动态获取日志中的所有字段。我正在使用此代码来解析 json,但输出是这样的。也许有人可以帮助我?谢谢。
const readFile = require("fs").readFile;
readFile("log.json", (err, data) => {
if (err) throw err;
const log = JSON.parse(data);
console.log(log);
});
输出:
{
log: 'Log Info : { "datetime" : "datetime", "field1" : "value1", "
field2" : "value2", "field3" : "value3", "field4" : "value4", "field5" :
"value5", "field6" : "value6", "field7" : "value7", "field8" : "value8"
, "field9" : "value9", "field10" : "value10", "field11" : "value11"}\n',
stream: 'stdout',
kubernetes: {
pod_name: 'pod_name',
namespace_name: 'namespace_name',
pod_id: 'pod_id',
host: 'host',
container_name: 'container_name',
docker_id: 'docker_id',
container_hash: 'container_hash',
container_image: 'container_image'
}
}
【问题讨论】:
-
为什么
log这个奇怪的“东西”的值应该只是另一个对象,而不是带有一些前缀的JSON,这使得它无效? -
这是一种不幸的格式,因为
log的值不是有效的JSON,给定'Log Info :文本。您必须使用子字符串操作来提取{和}之间的字符串并将其解析为 JSON。 -
到目前为止,您尝试过什么来自己解决这个问题? -> How much research effort is expected of Stack Overflow users?
-
我也尝试过使用正则表达式。
标签: javascript node.js json