我有一个要处理的JSON。 我正在使用jq,终生无法获得所需的输出。
我在下面有一个简单的例子,
<?php
$target_dir = "uploads";
if(!file_exists($target_dir))
{
mkdir($target_dir, 0777, true);
}
$target_dir = $target_dir . "/" . basename($_FILES["file"]["name"]);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir)) {
echo json_encode([
"Message" => "The file ". basename( $_FILES["file"]["name"]). " has been uploaded.",
"Status" => "OK"
]);
} else {
echo json_encode([
"Message" => "Sorry, there was an error uploading your file.",
"Status" => "Error"
]);
}
我的积木
{
"message" :"{ \"foo\": \"42\", \"bar\": \"less interesting data\"}"
}
给予
jq '."message"
{
"message" :{"foo": "42", "bar": "less interesting data"}
}
给予
{
"foo": "42",
"bar": "less interesting data"
}
."message"."bar"
所以
"less interesting data"
失败为JSON无效
{
"message" :"{"foo": "42", "bar": "less interesting data"}"
}
FAILS'jq:错误(在3处):无法索引字符串为“ bar”的字符串 退出状态5'
我尝试了很多不同的jq查询(我不会浪费您的时间列出它们)
所以我想了解有关id如何从JSON获取“栏”的一些建议
它不是将转换字符串转换为JSON的重复项,因为这会使您产生转换的想法。没有这个问题,您永远不会知道答案是使用fromjson
答案 0 :(得分:4)
使用fromjson
构造将字符串恢复为JSON文本。因此,鉴于以下内容
{
"message": "{ \"foo\": \"42\", \"bar\": \"less interesting data\" }"
}
提取bar
所需要做的就是
jq '."message"|fromjson|.bar' file
"less interesting data"
要打印不带引号的输出,请使用-r
/ --raw-ouput
标志,它以原始格式发出文本。如评论中所述,fromjson.bar
应该也可以按预期工作。