2014-05-18 8 views
12

मैं पावरशेल का उपयोग करके अपने पार्स किए गए JSON में कुछ जोड़ना चाहता हूं। मेरे कोड:पावरशेल पार्स किए गए JSON पर कुछ कैसे जोड़ सकता है?

function ConvertFromJson([string]$file) 
{ 
    [System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") 
    $jsoncontent = Get-Content $file 
    $jsonobj = New-Object System.Web.Script.Serialization.JavaScriptSerializer 
    $global:json = $jsonobj.DeserializeObject($jsoncontent) 
} 

मेरे JSON:

{ 
    "BlockA": { 
    "BlockB": { 
     "name": "BlockB", 
     "value": "Value_B" 
    }, 
    "BlockC": { 
     "name": "BlockC", 
     "value": "Value_C" 
    }, 
} 

मैं

$json.BlockA.Add("BlockC", "") 

और

०१२३५१६४१०६१ की कोशिश की:

{ 
    "BlockA": { 
    "BlockB": { 
     "name": "BlockB", 
     "value": "Value_B" 
    }, 
} 

मैं इस तरह Blockc बनाना चाहते हैं

$json.BlockA.BlockC.Add("name", "BlockC") 

लेकिन यह त्रुटि के साथ काम नहीं करता है:

there is no add method

मैंने कोशिश की मैं सभी कर सकते हैं, लेकिन सभी में विफल रहा है (कोशिश कर विधि जोड़ें, ऐड-सदस्य का उपयोग करें)।

जोड़ा गया: पीएस सी: \ उपयोगकर्ता \ विकास 7> $ जेसन.ब्लॉकए.ब्लॉकसी | गेट-सदस्य

TypeName: System.String 

Name    MemberType   Definition 
----    ----------   ---------- 
Clone   Method    System.Object Clone() 
CompareTo  Method    int CompareTo(System.Object value), int CompareTo(string strB) 
Contains   Method    bool Contains(string value) 
CopyTo   Method    System.Void CopyTo(int sourceIndex, char[] destination, int destinationIndex,... 
EndsWith   Method    bool EndsWith(string value), bool EndsWith(string value, System.StringCompari... 
Equals   Method    bool Equals(System.Object obj), bool Equals(string value), bool Equals(string... 
GetEnumerator Method    System.CharEnumerator GetEnumerator() 
GetHashCode  Method    int GetHashCode() 
GetType   Method    type GetType() 
GetTypeCode  Method    System.TypeCode GetTypeCode() 
IndexOf   Method    int IndexOf(char value), int IndexOf(char value, int startIndex), int IndexOf... 
IndexOfAny  Method    int IndexOfAny(char[] anyOf), int IndexOfAny(char[] anyOf, int startIndex), i... 
Insert   Method    string Insert(int startIndex, string value) 
IsNormalized  Method    bool IsNormalized(), bool IsNormalized(System.Text.NormalizationForm normaliz... 
LastIndexOf  Method    int LastIndexOf(char value), int LastIndexOf(char value, int startIndex), int... 
LastIndexOfAny Method    int LastIndexOfAny(char[] anyOf), int LastIndexOfAny(char[] anyOf, int startI... 
Normalize  Method    string Normalize(), string Normalize(System.Text.NormalizationForm normalizat... 
PadLeft   Method    string PadLeft(int totalWidth), string PadLeft(int totalWidth, char paddingChar) 
PadRight   Method    string PadRight(int totalWidth), string PadRight(int totalWidth, char padding... 
Remove   Method    string Remove(int startIndex, int count), string Remove(int startIndex) 
Replace   Method    string Replace(char oldChar, char newChar), string Replace(string oldValue, s... 
Split   Method    string[] Split(Params char[] separator), string[] Split(char[] separator, int... 
StartsWith  Method    bool StartsWith(string value), bool StartsWith(string value, System.StringCom... 
Substring  Method    string Substring(int startIndex), string Substring(int startIndex, int length) 
ToCharArray  Method    char[] ToCharArray(), char[] ToCharArray(int startIndex, int length) 
ToLower   Method    string ToLower(), string ToLower(System.Globalization.CultureInfo culture) 
ToLowerInvariant Method    string ToLowerInvariant() 
ToString   Method    string ToString(), string ToString(System.IFormatProvider provider) 
ToUpper   Method    string ToUpper(), string ToUpper(System.Globalization.CultureInfo culture) 
ToUpperInvariant Method    string ToUpperInvariant() 
Trim    Method    string Trim(Params char[] trimChars), string Trim() 
TrimEnd   Method    string TrimEnd(Params char[] trimChars) 
TrimStart  Method    string TrimStart(Params char[] trimChars) 
Chars   ParameterizedProperty char Chars(int index) {get;} 
Length   Property    System.Int32 Length {get;} 
+0

Powershell का कौन-सा संस्करण उपयोग कर रहे हैं: निम्न से पता चलता है कि कैसे एक संपत्ति एक JSON ब्लॉक के आधार पर जोड़ने के लिए? – manojlds

उत्तर

19

आप PowerShell 3.0/4.0 उपयोग कर रहे हैं आप ConvertFrom-Json cmdlet का उपयोग कर अपने रूपांतरण को आसान बनाने में कर सकते हैं।

इसके अलावा, यदि आपके पास पीएस या नेट ऑब्जेक्ट प्रकार हैं, तो एड-सदस्य cmdlet आपको मनमानी गुण जोड़ने की अनुमति देता है।

$json = @" 
{ 
    "BlockA": { 
    "BlockB": { 
     "name": "BlockB", 
     "value": "Value_B" 
    } 
    } 
} 
"@ 

$blockcvalue [email protected]" 
    { 
    "name":"BlockC", 
    "value":"ValueC" 
    } 
"@ 

$jobj = ConvertFrom-Json -InputObject $json 

$jobj.BlockA | add-member -Name "BlockC" -value (Convertfrom-Json $blockcvalue) -MemberType NoteProperty 

write-host (ConvertTo-Json $jobj) 
0

आपको वह त्रुटि मिलती है क्योंकि आपका $ जेसन वास्तव में दो वस्तुओं का संग्रह है। उनमें से एक एक असेंबली है और दूसरा एक शब्दकोश है। लाइन से पाइप आउटपुट जो इससे बचने के लिए असेंबली को Out-Null पर लोड करता है। उदाहरण:

function ConvertFrom-Json([String]$sRawJson) { 
    [System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") ` 
     | Out-Null 
    $oJsSerializer = ` 
     New-Object System.Web.Script.Serialization.JavaScriptSerializer 

    return $oJsSerializer.DeserializeObject($sRawJson) 
} 

$sBaseContent = @" 
{ 
    "BlockA": { 
     "BlockB": { 
      "name": "BlockB", 
      "value": "Value_B" 
     } 
    } 
} 
"@ 

$sBlockcContent = @" 
{ 
    "name": "BlockC", 
    "value": "Value_C" 
} 
"@ 

$jsonBaseObj = ConvertFrom-Json($sBaseContent) 
$jsonBlockcObj = ConvertFrom-Json($sBlockcContent) 

$jsonBaseObj.BlockA.Add("BlockC", $jsonBlockcObj) 
$jsonBaseObj 
संबंधित मुद्दे