【发布时间】:2021-07-02 19:17:31
【问题描述】:
我正在使用 jq 并希望根据另一个数组不为空的条件从大型 json 文件中选择属性的值。如果那是空的,那么我们应该忽略该值并检查下一个属性,依此类推。我们还希望将所有满足非空数组条件的值存储到一个文本文件中,每行一个值且不加引号。
例如,我有一个大型 json 文件(16+ GB),其中包含 200k 以及以下条目:
{"one": "Some string", "two": "A", "three": []}
{"one": "Some string", "two": "B", "three": [{"a": 1,"b": 2}]}
{"one": "Some string", "two": "C", "three": []}
具体来说,我想选择只有那些 "two" 属性的值,其中数组"three" 的值不为空。因此,在上面的示例中,应该只返回值 "B",而应该忽略所有其他值。我还需要将返回的所有此类值(如上述情况中的 "B" )存储到一个文本文件中,每行一个且不加引号。
似乎无法弄清楚该怎么做。非常感谢您的帮助。
【问题讨论】:
-
您显示的输入无效(对象必须是键/值对);什么是预期的输出?
two的值,每行一个?引用,未引用? -
这是一个大型 json 文件,其中包含我在问题中所述格式的对象。我希望属性 2 的每个值每行一个,并且仅在属性 3 不为空的情况下不加引号。
-
1.请注意,
null是一个 JSON 值,与[]不同,因此您尝试的澄清只会使水变得混乱。 2. 请给出一个更全面的例子,包括预期的输出,如果可能的话,如果“B”值出现不止一次,则显示预期的结果。 -
很抱歉我对 JSON 格式缺乏了解。是的,当属性“三”中有一些值时,我想要属性“二”中的所有值。
标签: arrays json conditional-statements jq