代码之家  ›  专栏  ›  技术社区  ›  Alex Cohen

如何使用JQ字符串化JSON

  •  0
  • Alex Cohen  · 技术社区  · 6 年前

    使用JQ,我希望获得一个复杂的JSON对象,该对象包含作为字符串嵌入的JSON,然后将其全部转换成一个可以轻松嵌入到其他JSON对象中的有效字符串。

    例如,假设我有一个json对象:

    {
      "region": "CA",
      "waf_rule_tags": "{\"RULEID:942100\":[\"application-multi\",\"language-multi\",\"platform-multi\",\"attack-sqli\",\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\",\"WASCTC/WASC-19\",\"OWASP_TOP_10/A1\",\"OWASP_AppSensor/CIE1\",\"PCI/6.5.2\"]}"
    }
    

    "{\"region\": \"CA\",\"waf_rule_tags\": \"{\\\"RULEID:942100\\\":[\\\"application-multi\\\",\\\"language-multi\\\",\\\"platform-multi\\\",\\\"attack-sqli\\\",\\\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\\\",\\\"WASCTC/WASC-19\\\",\\\"OWASP_TOP_10/A1\\\",\\\"OWASP_AppSensor/CIE1\\\",\\\"PCI/6.5.2\\\"]}\"}"
    

    这样我就可以把这根绳子插在 text

    {
          "title": "12345-accesslogs",
          "text": "{\"region\": \"CA\",\"waf_rule_tags\": \"{\\\"RULEID:942100\\\":[\\\"application-multi\\\",\\\"language-multi\\\",\\\"platform-multi\\\",\\\"attack-sqli\\\",\\\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\\\",\\\"WASCTC/WASC-19\\\",\\\"OWASP_TOP_10/A1\\\",\\\"OWASP_AppSensor/CIE1\\\",\\\"PCI/6.5.2\\\"]}\"}",
          "priority": "normal",
          "tags": ["environment:test"],
          "alert_type": "info"
    }
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   peak    6 年前

    简而言之, tostring

    假设原始JSON对象位于名为对象.json,并且模板位于模板.json,您可以写:

    jq --argfile object object.json '.text = ($object | tostring)' template.json
    

    jq -n 'input | input + {text: tostring}' \
       object.json template.json
    

    或者更紧凑,如果稍微更模糊:

    jq 'input + {text: tostring}' object.json template.json