2016-11-01 8 views
-1

ich einige json Eingangsdaten haben würde Ich mag die Variablenwerte in etwas extrahieren ich in mein Skriptjq mit JSON-Daten iterieren

Eingangsabtastwert einfügen kann:

{ 
    "menu": { 
    "props": [{ 
     "name": "foo1", 
     "model": "bar1" 
    }, { 
     "name": "foo2", 
     "model": "bar2" 
    }, { 
     "name": "foo3", 
     "model": "bar3" 
    }, { 
     "name": "foo4", 
     "model": "bar4" 
    }, { 
     "name": "foo5", 
     "model": "bar5" 
    }] 
    } 
} 

gewünschten Ausgang :

AddMenuItem(menu, "bar1", "foo1"); 
AddMenuItem(menu, "bar2", "foo2"); 
AddMenuItem(menu, "bar3", "foo3"); 
...etc 

Antwort

1

So etwas wie dies funktionieren würde:

$ jq -r '.menu.props[] | "AddMenuItem(menu, \"\(.model)\", \"\(.name)\")"' file.txt 
AddMenuItem(menu, "bar1", "foo1") 
AddMenuItem(menu, "bar2", "foo2") 
AddMenuItem(menu, "bar3", "foo3") 
AddMenuItem(menu, "bar4", "foo4") 
AddMenuItem(menu, "bar5", "foo5") 

-r druckt Rohausgabe (nicht JSON-codiert).

Das Array props mit [] auspacken und die Zeichenfolge "AddMenu..." für jedes Element in diesem Array drucken.

Man kann auch ...props | map("AddMenu...")[] verwenden, die intuitiver sein könnte.

\(...) aktiviert die String-Interpolation zwischen ( und ).