मैं मौजूदा JSON सरणी के सभी आइटमों के लिए एक चर कैसे जोड़ सकता हूं?

Dec 08 2020

मेरे पास JSON- फाइल से निम्न JSON-array है:

[
  {
    "key": "Ley1",
    "file": "Filepath1",
    "line": 10,
    "rule": "csharpsquid:S1643",
    "message": "Use a StringBuilder instead.",
    "type": "CODE_SMELL"
  },
  {
    "key": "Key2",
    "file": "FilePath2",
    "line": 12,
    "rule": "csharpsquid:S1643",
    "message": "Use a StringBuilder instead.",
    "type": "CODE_SMELL"
  }
]

और मैं बैश-कमांड का उपयोग करके इसके सभी आइटमों के लिए वैरिएबल "क्रिटिकल" जोड़ना चाहता हूं, इसलिए यह इस तरह दिखता है:

[
      {
        "key": "Key1",
        "file": "Filepath1",
        "line": 10,
        "rule": "csharpsquid:S1643",
        "message": "Use a StringBuilder instead.",
        "type": "CODE_SMELL",
        "critical": "No"
      },
      {
        "key": "Key2",
        "file": "FilePath2",
        "line": 12,
        "rule": "csharpsquid:S1643",
        "message": "Use a StringBuilder instead.",
        "type": "CODE_SMELL",
        "critical": "Yes"
      }
    ]

दुर्भाग्य से मैं एक संपूर्ण JSON और बैश शुरुआती हूं और इस समस्या को हल करने के लिए एक bash- कमांड नहीं ढूंढ सका। मैंने jq-play पर jq के साथ एक लिट्टी बिट की कोशिश की लेकिन यह वास्तव में कुछ करने के लिए नेतृत्व नहीं करता था इसलिए मैं इसे यहाँ आज़माना चाहता था। मुझे उम्मीद है कि यह सभी जानकारी की आवश्यकता है, तो क्या किसी को इसके लिए एक आदेश पता है?

संपादित करें: यह यहाँ काम किया, धन्यवाद!

.[] |= . + {"critical": "No"}

लेकिन नहीं, मैं फ़ाइल-मूल्य के आधार पर "हां" या "नहीं" का मूल्य निर्धारित करना चाहता हूं। क्या आप जानते हैं कि कमांड को कैसे संपादित किया जाए ताकि यह महत्वपूर्ण मूल्य निर्धारित करने के लिए फ़ाइल-मान की जाँच करे?

इसे इस तरह तय करना चाहिए:

Filepath1, Filepath3 की ओर जाता है "critical" : "No"

तथा

Filepath2, Filepath4, Filepath5 की ओर जाता है "critical" : "Yes"

जवाब

0stone0 Dec 08 2020 at 18:48

आप एक अगर-बयान का उपयोग कर सकते हैं ;

jq '.[] |= . + {"critical": (if .file == "FilePath1" or .file == "FilePath3" then "no" else "yes" end)}'

इसे jqPlay पर आज़माएं

peak Dec 09 2020 at 04:08

अतिरेक को कम करने के लिए, आप इसके साथ जा सकते हैं:

map(. + {critical: (if .file | IN("FilePath1", "FilePath3") then "no" else "yes" end) })

या संक्षिप्तता के लिए:

map(. + {critical: ((.file | select(IN("FilePath1", "FilePath3")) | "no") // "yes" )})