2017-06-25 24 views
-3

JSON这是我的JSON:我如何可以排序我的BASH

{ 
    "zeta" : "ciao", 
    "form2" : { 
     "metodo" : "GET", 
     "action" : "", 
     "cognome" : { 
     "nome" : "cognome", 
     "placeholder" : "inserisci il tuo cognome" 
     } 
    }, 
    "form1" : { 
     "metodo" : "POST", 
     "action" : "", 
     "cognome" : { 
     "nome" : "matteoe", 
     "placeholder" : "inserisci il tuo cognome" 
     } 
    }, 
    "chiave" : "valore" 
} 

我wanto以字母顺序排序的json。结果:

{ “chiave”: “valore”, “泽塔”: “侨”, “form1的”:{ “动作”: “”, “方法方法”: “POST”, “ cognome“:{ ..... .....

此json具有按字母顺序排列的按键。

+3

欢迎来到SO,请展示您的编码工作, – Cyrus

+2

使用'jq'工具。 –

+1

为什么''zeta“'会在''form1'之前出现在字母排序中? –

回答

0
  1. “-S”命令行选项将导致输出中的所有对象都与排序的键一起呈现。

  2. 下面将发射所述输入物体在排序的顺序顶级密钥名称:

to_entries | sort_by(.key) | from_entries 
  • 一种方法来重建所有对象,以便按键排列顺序 是使用walk/1,例如
  • walk(if type == "object" 
         then to_entries | sort_by(.key) | from_entries 
         else . end) 
    
    1

    使用jq-S--sort-keys标志:

    $ echo '{"zeta":"ciao","form2":{"metodo":"GET","action":"","cognome":{"nome":"cognome","placeholder":"inserisci il tuo cognome"}},"form1":{"metodo":"POST","action":"","cognome":{"nome":"matteoe","placeholder":"inserisci il tuo cognome"}},"chiave":"valore"}' | jq --sort-keys '.' 
    { 
        "chiave": "valore", 
        "form1": { 
        "action": "", 
        "cognome": { 
         "nome": "matteoe", 
         "placeholder": "inserisci il tuo cognome" 
        }, 
        "metodo": "POST" 
        }, 
        "form2": { 
        "action": "", 
        "cognome": { 
         "nome": "cognome", 
         "placeholder": "inserisci il tuo cognome" 
        }, 
        "metodo": "GET" 
        }, 
        "zeta": "ciao" 
    } 
    

    注意,无论深度,这个排序的所有键的哈希值。