Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JQ将纯文本块转换为JSON_Json_Jq_Key Value - Fatal编程技术网

使用JQ将纯文本块转换为JSON

使用JQ将纯文本块转换为JSON,json,jq,key-value,Json,Jq,Key Value,我有一个格式如下的纯文本文件: foo: bar color: blue names: joe, john, mary, bob, sue [., inputs] # A | map(split(": ") # B | {(.[0])

我有一个格式如下的纯文本文件:

foo: bar
color: blue
names: joe, john, mary, bob, sue
  [., inputs]                                                              # A
| map(split(": ")                                                          # B
  | {(.[0]): (.[1] | split(", ") | if length > 1 then . else .[0] end )})  # C
| reduce .[] as $x ({}; . + $x)                                            # D

我需要以JSON格式输出此文件的内容:

{
  "foo": "bar",
  "color": "blue",
  "names": ["joe", "john", "mary", "bob", "sue"]
}
我尝试过使用:jq-R-n'[inputs | split:|[{.0:[1]| add'testfile让我们假设文件名为testfile,但我只能得到以下结果:

{
  "foo": "bar",
  "color": "blue",
  "names": "joe, john, mary, bob, sue"
}
要获得所需的输出,我需要做什么?我尝试过管道拆分,在[1]之后,但它会将每个值对放入一个数组中,这是我不想要的。

对于-raw输入,您正在寻找类似以下内容:

foo: bar
color: blue
names: joe, john, mary, bob, sue
  [., inputs]                                                              # A
| map(split(": ")                                                          # B
  | {(.[0]): (.[1] | split(", ") | if length > 1 then . else .[0] end )})  # C
| reduce .[] as $x ({}; . + $x)                                            # D

其中:

A:将第一行和最后一行组合成一个数组,例如[foo:bar,…] B:拆分每一行,例如[foo,bar],…] C:将每个子集转换为一个对象,其中第一个元素是键,第二个元素是值。值按分割,但如果分割后只有一个元素,则将其取出。 D:使用+将每个对象合并为一个,例如{foo:bar}+{color:blue}=>{foo:bar,color:blue,…} 使用-raw输入,您将查找以下内容:

foo: bar
color: blue
names: joe, john, mary, bob, sue
  [., inputs]                                                              # A
| map(split(": ")                                                          # B
  | {(.[0]): (.[1] | split(", ") | if length > 1 then . else .[0] end )})  # C
| reduce .[] as $x ({}; . + $x)                                            # D

其中:

A:将第一行和最后一行组合成一个数组,例如[foo:bar,…] B:拆分每一行,例如[foo,bar],…] C:将每个子集转换为一个对象,其中第一个元素是键,第二个元素是值。值按分割,但如果分割后只有一个元素,则将其取出。 D:使用+将每个对象合并为一个,例如{foo:bar}+{color:blue}=>{foo:bar,color:blue,…}
始终拆分值。如果结果数组有多个元素,则分配它;否则分配原始字符串

减少投入/:如[$k,$v]。; [$k]=$v/,|如果有1,那么。否则$v结束 或者,检查该值是否先包含分隔符,然后再拆分,如果这样更有意义的话

$v |如果索引,则拆分,否则。结束
请注意,您需要在命令行上使用-R和-n调用JQ,以使其正常工作。

始终拆分值。如果生成的数组有多个元素,则分配它;否则分配原始字符串

减少投入/:如[$k,$v]。; [$k]=$v/,|如果有1,那么。否则$v结束 或者,检查该值是否先包含分隔符,然后再拆分,如果这样更有意义的话

$v |如果索引,则拆分,否则。结束 请注意,您需要在命令行上使用-R和-n调用JQ,这样才能工作