使用jq比较来自同一json的两个字段并打印一些其他字段作为结果

时间:2017-07-06 11:15:32

标签: json jq

我有以下格式的json数据

{
  "body": [
    {
      "username": "name1",
      "id": "4444"
    },
    {
      "username": "name2",
      "id": "5555"
    }
  ],
  "meta": {
    "input": "name1"
  }}

鉴于此数据,我希望将"用户名" s与#34; meta.input"匹配。如果有匹配的返回/打印相关ID。

2 个答案:

答案 0 :(得分:4)

jq 解决方案:

jq '.meta.input as $meta | .body[] | select(.username == $meta).id' input.json

输出:

"4444"
  • .meta.input as $meta - 将.meta.input键值分配给$meta变量以进行进一步比较

答案 1 :(得分:0)

这应该就是这样简单:

var data = {
  "body": [{
    "username": "name1",
    "id": "4444"
  }, {
    "username": "name2",
    "id": "5555"
  }],
  "meta": {
    "input": "name1"
  }
};

function getID(data) {
  var username = data.meta.input;
  var userID;

  for (i in data.body) {
  
    if (data.body[i].username === username) {
      userID = data.body[i].id;
      break;
    }
  }

  return userID;
}

var id = getID(data);
alert(id);