用转义的var在jq中拉值

时间:2018-10-12 11:12:52

标签: json jq

我有一个要处理的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

1 个答案:

答案 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应该也可以按预期工作。