2014-11-24 7 views
8

Ich habe diese JSON in einer Datei namens test.txtConvertFrom-Json Powershell-Cmdlets Parsen nicht ganze JSON-Objekt

{ 
    "local-dev": { 
    "client": { 
     "server-url": "http://localhost:3000" 
    }, 
    "server": { 
     "renterEndpoint": { 
     "rejectUnauthorized": false, 
     "host": "blah.blah.com", 
     "port": 443, 
     "path": "/api/renter" 
     }, 
     "homeownerEndpoint": { 
     "rejectUnauthorized": false, 
     "host": "blah.blah.com", 
     "port": 443, 
     "path": "/api/homeowner" 
     } 
    } 
    } 
} 

Wenn ich diese Powershell-Befehl ausführen:

Get-Content "test.txt" -Raw | ConvertFrom-Json 

Die löschte ich enthält keines der Objekte unter der zweiten Ebene (dh die Client- und Serverobjekte haben keine Eigenschaften).

local-dev 
--------- 
@{client=; server=} 

Wer hat irgendwelche Ideen?

Antwort

8

Die gewünschten Daten sind da. Sie müssen nur die "Knoten" (nicht die richtigen Begriffe) Navigieren Wenn Sie die Daten aus Ihrer Datei in eine Variable zurückgeben und Get-Member verwenden, können Sie sehen, was Sie suchen.

PS C:\Users\Cameron> $json | Get-Member | Select-Object name 

Name                                                
----                                                
Equals                                                
GetHashCode                                              
GetType                                               
ToString                                               
local-dev  

Lets sehen, was in local-dev. Notieren Sie die Anführungszeichen um die Eigenschaft. Benötigen Sie PowerShell, um dies als Zeichenfolge zu behandeln, da sonst Parsing-Fehler auftreten.

PS C:\Users\Cameron> $json."local-dev" 

client          server          
------          ------          
@{server-url=http://localhost:3000}   @{renterEndpoint=; homeownerEndpoint=} 

Lasst uns ein wenig weiter

reisen
PS C:\Users\Cameron> $json."local-dev".server.renterEndpoint 

    rejectUnauthorized host          port path     
    ------------------ ----          ---- ----     
       False blah.blah.com        443 /api/renter 

Ich bin sicher, es gibt andere Wege, um die Daten, die Sie schauen, um zu extrahieren. Ich habe mich erst kürzlich damit beschäftigt. Point-Sein ist, dass, wenn Sie wissen, was Sie suchen, verwenden Sie einfach die Eigenschaften des Objekts, um zu bekommen, was Sie brauchen. Wenn dieses Wissen Ihnen nicht bekannt ist, kann Get-Member helfen, die Eigenschaften zu offenbaren, um Ihnen die Datenstruktur zu zeigen.

+0

Danke Matt! Es war einfach nicht sofort offensichtlich, dass die Daten da waren. – dprothero

+0

@dprothero Einverstanden. Es schien einfach so, als müsste es irgendwo da sein :) – Matt

+7

Gute Antwort ... FYI, nachdem ich selbst gebissen wurde, benutze ich einen Trick, um solche Dinge zu bestätigen .. 'ConvertTo-Json $ json -Depth 10' und es wird das richtige zeigen und gesamte Struktur (Tiefe 10, kann höhere Nummer verwenden), schön formatiert. –

Verwandte Themen