通过jq

时间:2016-07-18 12:42:51

标签: json jq

我有json

{
    "file1": [{
        "username": "myname",
        "groupname": "mypassword",
        "environment": [{
            "name": "UMASK",
            "value": "022"
        },
        {
            "name": "DEBUG",
            "value": "2"
        }]
    }]
}

并希望将DEBUG的值更改为5.

尝试使用以下命令

  

jq .file1 [0] .environment sandeep.json | jq'(。[] | select(.name ==   " DEBUG")| .value)| =" 5"'

这将返回json的特定部分,如

[
  {
    "name": "UMASK",
    "value": "022"
  },
  {
    "name": "DEBUG",
    "value": "5"
  }
]

但我希望看到更改值的完整json

{
    "file1": [{
        "username": "myname",
        "groupname": "mypassword",
        "environment": [{
            "name": "UMASK",
            "value": "022"
        },
        {
            "name": "DEBUG",
            "value": "5"
        }]
    }]
}

请建议我

1 个答案:

答案 0 :(得分:1)

应该是:

IEnumerable<MyRecord> Request = null;
        if (!status.Equals(""))
        {
            if (deliveryDateFrom == null && caseDateFrom == null && pickupDateFrom == null)
            {
                //only request status
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status);                            
            }
            else if (deliveryDateFrom != null && caseDateFrom == null && pickupDateFrom == null)
            {
                // request status and delivery date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.DeliveryDate >= deliveryDateFrom && r.DeliveryDate <= deliveryDateTo));
            }
            else if (deliveryDateFrom == null && caseDateFrom != null && pickupDateFrom == null)
            {
                // request status and case date 
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.CaseDate >= caseDateFrom && r.CaseDate <= caseDateTo));
            }
            else if (deliveryDateFrom == null && caseDateFrom == null && pickupDateFrom != null)
            {
                // request status and pickup date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.PickupDate >= pickupDateFrom && r.PickupDate <= pickupDateTo));  
            }
            else if (deliveryDateFrom != null && caseDateFrom != null && pickupDateFrom == null)
            {
                // request status, delivery date and case date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.DeliveryDate >= deliveryDateFrom && r.DeliveryDate <= deliveryDateTo)
                    && (r.CaseDate >= caseDateFrom && r.CaseDate <= caseDateTo));  
            }
            else if (deliveryDateFrom != null && caseDateFrom == null && pickupDateFrom != null)
            {
                // request status, delivery date and pickup date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.DeliveryDate >= deliveryDateFrom && r.DeliveryDate <= deliveryDateTo)
                    && (r.PickupDate >= pickupDateFrom && r.PickupDate <= pickupDateTo)); 
            }
            else if (deliveryDateFrom == null && caseDateFrom != null && pickupDateFrom != null)
            {
                // request status, case date and pickup date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.CaseDate >= caseDateFrom && r.CaseDate <= caseDateTo)
                    && (r.PickupDate >= pickupDateFrom && r.PickupDate <= pickupDateTo)); 
            }
            else if (deliveryDateFrom != null && caseDateFrom != null && pickupDateFrom != null)
            {
                // request status, delivery date, case date and pickup date
                Request = GetRecord("EquipRequest")
                    .Where(r => r.Status == status && (r.DeliveryDate >= deliveryDateFrom && r.DeliveryDate <= deliveryDateTo)
                    && (r.CaseDate >= caseDateFrom && r.CaseDate <= caseDateTo)
                    && (r.PickupDate >= pickupDateFrom && r.PickupDate <= pickupDateTo));
            }                
        }

输出:

jq '(.file1[].environment[]|select(.name=="DEBUG").value) |= 5' file.json