2017-08-08 2 views
1

私のPythonモデルにJSON出力を書きたいと思います。モデルへのJSON出力の書き込み

マイモデル:

class Thing(models.Model): 
    name = models.CharField(max_length=50) 
    serial = models.BigIntegerField() 
    san = models.CharField(max_length=50) 
    validfrom = models.CharField(max_length=50) 
    validto = models.CharField(max_length=50) 
    requester = models.CharField(max_length=50) 
    def __unicode__(self): 
     return self.name 

これは私のJSON出力です:

{ 
    "Serial Number": "123132213", 
    "SAN": "hfdhfg", 
    "Valid From": " 04.08.2015 18:43", 
    "Valid To": " 03.08.2020 18:43", 
    "URL": "https://url.com/3212" 
} 

私は私が私のモデルに保存しようと、この出力を与えるコマンドを実行しています。

# Execute command & read 
     stdin,stdout,stderr=ssh.exec_command(cmd) 
     outlines=stdout.readlines() 
     resp=''.join(outlines) 
     print(resp) 

     # Load JSON Output and save into model 
     jsonToPython = json.loads(resp) 
     thing_ser.validated_data['serial'] = jsonToPython['Serial Number'] 
     thing_ser.validated_data['san'] = jsonToPython['Serial Number'] 
     thing_ser.validated_data['validfrom'] = jsonToPython['Valid From'] 
     thing_ser.validated_data['validto'] = jsonToPython['Valid To'] 

     thing_ser.save() 

私はJSONが文字列と文字列をjson.loads exceptsで、私はこれに適切なアプローチだかわからないんだけどではないので、これは動作しませんと思います。

答えて

0

respは文字列である必要があります。私はこれがJSONの問題ではないと思います。私はssh.exec_command()メソッドのエキスパートではありません(私はあなたがparamikoを使用していると仮定していますか?)しかし、あなたは有効なJSON文字列をrespに入れていないと思います... this SO questioncmdに問題があることを示唆しています。 cmdが文字列である場合は、あなたのコマンドが実際に実行されているだけで入力されていないと、その後のsshターミナルに座っていることを確認するために、それに改行を追加してみてください:

stdin, stdout, stderr = ssh.exec_command(cmd + '\n') 

また、あなたは上の詳細情報を提供することができますresp変数? print respは何をしますか?そして、print type(resp)はどうですか?

+0

はい私はssh接続を開始し、powershellスクリプトを実行するためにparamikoを使用しています。私のCMDはcmd = 'powershell.exe -file C:\\ Powershell \\\\ script.ps1 -CN%s'です。 Jsonの出力私はpowershellスクリプトを構築しています。もし私がプリント(resp)をしたら、これは{ "シリアル番号": "1223"、 "SAN": "fewfew"、 "Valid From": "08.08.2017 14:41"、 "有効なTo ":" 07.08.2020 14:41 "、 " URL ":" https://url.com/fewfew- " ) –

+0

'印刷タイプ(resp) 'で追加してください。あなたは 'thing_ser.validated_data ['serial'] = resp ['Serial Number']'などを実行することができます。 –

+0

エラーが見つかりました。import astとdict = ast.literal_evalを追加する必要がありましたそれを動作させるために(resp) –

関連する問題