json - JQ如何从json值打印换行符而不是换行符

标签 json newline jq

我有一些以 JSON 格式输出信息的日志。这是为了收集到elasticsearch。

一些测试人员和运维人员希望能够读取服务器上的日志。

这是一些示例 JSON:

{
"@timestamp": "2015-09-22T10:54:35.449+02:00",
"@version": 1,
"HOSTNAME": "server1.example",
"level": "WARN",
"level_value": 30000,
"logger_name": "server1.example.adapter",
"message": "message"
"stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
}

等等。

是否可以让 Jq 打印换行符而不是\n 字符?

最佳答案

最初给出的输入不是非常有效的 JSON,并且不清楚所需的输出是什么,但以下内容可能会引起人们的兴趣。它是为当前版本的 jq(1.5 版)编写的,但可以很容易地适应 jq 1.4:

def json2qjson:
  def pp: if type == "string" then "\"\(.)\""  else . end;
  . as $in
  | foreach keys[] as $k (null; null; "\"\($k)\": \($in[$k] | pp)" ) ;


def data: {
  "@timestamp": "2015-09-22T10:54:35.449+02:00",
  "@version": 1,
  "HOSTNAME": "server1.example",
  "level": "WARN",
  "level_value": 30000,
  "logger_name": "server1.example.adapter",
  "message": "message",
  "stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
};

data | json2qjson

输出:
$ jq -rnf json2qjson.jq
"@timestamp": "2015-09-22T10:54:35.449+02:00"
"@version": 1
"HOSTNAME": "server1.example"
"level": "WARN"
"level_value": 30000
"logger_name": "server1.example.adapter"
"message": "message"
"stack_trace": "ERROR LALALLA
ERROR INFO NANANAN
SOME MORE ERROR INFO
BABABABABABBA BABABABA ABABBABAA BABABABAB
"

关于json - JQ如何从json值打印换行符而不是换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715008/

相关文章:

json - 如何用jq在json中搜索?

json - jq 按键值排序

json - 获取 JSON 文件中的最后一个元素

javascript - 限制 json 的结果

c++ - C++ 中的 '\n' 或 "\n"有什么区别?

c++ - "unexpected tokens following preprocessor directive - expected a newline"

objective-c - 在 NSDocument 中设置行终止符字符串?

xcode - 将 NSArray 转换为 NSString 会崩溃?

android - 无法将此字符串转换为 JSON

json - 使用 SAS BASE 解析来自 JSON 的变量中带有 unicode 字符的表