2013-05-15 6 views
25

इस प्रारूप में JSON पर विचार करें:PowerShell: फ़ील्ड मान से JSON ऑब्जेक्ट को पुनः प्राप्त

$JSON = Get-Content $jsonConfigFile | Out-String | ConvertFrom-Json 

मान लिया जाये कि हम नहीं जानते:

"Stuffs": [ 
    { 
     "Name": "Darts", 
     "Type": "Fun Stuff" 
    }, 
    { 
     "Name": "Clean Toilet", 
     "Type": "Boring Stuff" 
    } 
] 

PowerShell 3 में, हम सामग्री की एक सूची प्राप्त कर सकते हैं ऑब्जेक्ट्स के ऑर्डरिंग सहित सूची की सटीक सामग्री, हम नाम फ़ील्ड के लिए विशिष्ट मान के साथ ऑब्जेक्ट को कैसे पुनर्प्राप्त कर सकते हैं?

ब्रूट बल, हम सूची के माध्यम से पुनरावृति सकता है:

foreach($Stuff in $JSON.Stuffs) { 

लेकिन मुझे उम्मीद है एक और अधिक प्रत्यक्ष तंत्र (सी # में Lync या लैम्ब्डा भाव के समान) वहां मौजूद हूँ।

उत्तर

30
$json = @" 
{ 
"Stuffs": 
    [ 
     { 
      "Name": "Darts", 
      "Type": "Fun Stuff" 
     }, 

     { 
      "Name": "Clean Toilet", 
      "Type": "Boring Stuff" 
     } 
    ] 
} 
"@ 

$x = $json | ConvertFrom-Json 

$x.Stuffs[0] # access to Darts 
$x.Stuffs[1] # access to Clean Toilet 
$darts = $x.Stuffs | where { $_.Name -eq "Darts" } #Darts 
+0

धन्यवाद डेविड। मैंने अपने प्रश्न में और स्पष्ट होने के लिए संशोधन किया है। आपका उत्तर काम नहीं करेगा क्योंकि कोड समय से पहले नहीं जानता कि JSON कैसे संरचित है। यह हो सकता है कि डार्ट्स स्लॉट 0 में स्लॉट 0 और स्वच्छ शौचालय में हो, लेकिन यह भी हो सकता है कि स्वच्छ शौचालय स्लॉट 0 में है और डार्ट्स स्लॉट में हैं 1. इसलिए मुझे नाम फ़ील्ड पर ऑब्जेक्ट्स से मिलान करने के लिए कुछ तरीका चाहिए। – BaltoStar

+9

$ x.Stuffs | जहां {$ _। नाम -eq "डार्ट्स"} –

20

मैं बस यहाँ एक ही प्रश्न पूछा: https://stackoverflow.com/a/23062370/3532136 यह एक अच्छा समाधान है। मुझे उम्मीद है कि यह ^^ में मदद करता है। फिर से शुरू में, आप इस का उपयोग कर सकते हैं:

मेरे मामले में JSON फ़ाइल jsonfile.json बुलाया गया था:

{ 
    "CARD_MODEL_TITLE": "OWNER'S MANUAL", 
    "CARD_MODEL_SUBTITLE": "Configure your download", 
    "CARD_MODEL_SELECT": "Select Model", 
    "CARD_LANG_TITLE": "Select Language", 
    "CARD_LANG_DEVICE_LANG": "Your device", 
    "CARD_YEAR_TITLE": "Select Model Year", 
    "CARD_YEAR_LATEST": "(Latest)", 
    "STEPS_MODEL": "Model", 
    "STEPS_LANGUAGE": "Language", 
    "STEPS_YEAR": "Model Year", 
    "BUTTON_BACK": "Back", 
    "BUTTON_NEXT": "Next", 
    "BUTTON_CLOSE": "Close" 
} 

कोड:

$json = (Get-Content "jsonfile.json" -Raw) | ConvertFrom-Json 

$json.psobject.properties.name 

आउटपुट:

CARD_MODEL_TITLE 
CARD_MODEL_SUBTITLE 
CARD_MODEL_SELECT 
CARD_LANG_TITLE 
CARD_LANG_DEVICE_LANG 
CARD_YEAR_TITLE 
CARD_YEAR_LATEST 
STEPS_MODEL 
STEPS_LANGUAGE 
STEPS_YEAR 
BUTTON_BACK 
BUTTON_NEXT 
BUTTON_CLOSE 

धन्यवाद करने के लिए mjolinor

8

डेविड ब्राबांट का जवाब मुझे मैं क्या जरूरत के लिए नेतृत्व किया, इस के अलावा के साथ:

x.Stuffs | where { $_.Name -eq "Darts" } | Select -ExpandProperty Type 
संबंधित मुद्दे