0

このデータを解析しようとしています (具体的には Viper マルウェア分析フレームワーク API から)。これを行う最善の方法を見つけるのに苦労しています。理想的には、次のことを行うだけです。

jsonObject.get("SSdeep")

...そして、私は値を取得します。

残念ながら、これは有効な JSON ではないと思います。プロジェクトのソースを編集せずに、どうすればこの適切な JSON を作成したり、これらの値を簡単に取得したりできますか?

[{
'data': {
    'header': ['Key', 'Value'],
    'rows': [
        ['Name', u 'splwow64.exe'],
        ['Tags', ''],
        ['Path', '/home/ubuntu/viper-master/projects/../binaries/8/e/e/5/8ee5b228bd78781aa4e6b2e15e965e24d21f791d35b1eccebd160693ba781781'],
        ['Size', 125952],
        ['Type', 'PE32+ executable (GUI) x86-64, for MS Windows'],
        ['Mime', 'application/x-dosexec'],
        ['MD5', '4b1d2cba1367a7b99d51b1295b3a1d57'],
        ['SHA1', 'caf8382df0dcb6e9fb51a5e277685b540632bf18'],
        ['SHA256', '8ee5b228bd78781aa4e6b2e15e965e24d21f791d35b1eccebd160693ba781781'],
        ['SHA512', '709ca98bfc0379648bd686148853116cabc0b13d89492c8a0fa2596e50f7e4d384e5c359081a90f893d8d250cfa537193cbaa1c53186f29c0b6dedeb50d53d4d'],
        ['SSdeep', ''],
        ['CRC32', '7106095E']
    ]
},
'type': 'table'
}]

編集 1 ありがとうございます。だから私はこれを試しました:

        jsonObject = r.content.replace("'", "\"")
        jsonObject = jsonObject.replace(" u", "")

そして、私が今持っている出力は次のとおりです。

"[{"data": {"header": ["Key", "Value"], "rows": [["Name","splwow64.exe"], ["Tags", ""], ["Path", "/home/ubuntu/viper-master/projects/../binaries/8/e/e/5/8ee5b228bd78781aa4e6b2e15e965e24d21f791d35b1eccebd160693ba781781"], ["Size", 125952], ["Type", "PE32+ executable (GUI) x86-64, for MS Windows"], ["Mime", "application/x-dosexec"], ["MD5", "4b1d2cba1367a7b99d51b1295b3a1d57"], ["SHA1", "caf8382df0dcb6e9fb51a5e277685b540632bf18"], ["SHA256", "8ee5b228bd78781aa4e6b2e15e965e24d21f791d35b1eccebd160693ba781781"], ["SHA512", "709ca98bfc0379648bd686148853116cabc0b13d89492c8a0fa2596e50f7e4d384e5c359081a90f893d8d250cfa537193cbaa1c53186f29c0b6dedeb50d53d4d"], ["SSdeep", ""], ["CRC32", "7106095E"]]}, "type": "table"}]"

そして今、私はこのエラーが発生しています:

  File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 5 - line 1 column 716 (char 4 - 715)

: 意図しない結果を招く可能性があるため、特に "u" のような検索と置換は実行したくありません。

編集2: それを理解しました!みんなありがとう!

誰かがサーバーからの元のテキストは「辞書のリスト」であると述べたので、これが私がやったことです:

        r = requests.post(url, data=data) #Make the server request
        listObject = r.content #Grab the content (don't really need this line)
        listObject = listObject[1:-1] #Get rid of the quotes 
        listObject = ast.literal_eval(listObject) #Create a list out of the literal characters of the string
        dictObject = listObject[0] #My dict! 
4

3 に答える 3

1

JSON は、 JSON 標準"から、文字列の二重引用符を指定します

値は、二重引用符で囲まれた文字列、数値、true、false、null、またはオブジェクトまたは配列にすることができます。

したがって、すべての一重引用符を二重引用符に置き換える必要があります。

data.replace("'", '"')

uフィールドには、Name除去する必要のあるスプリアスもあります。
ただし、データが有効な Python であり、それを評価してみることができると信頼できる場合、これは元のデータで機能しました ( の後のスペースなしu):

result = eval(data)

またはより安全に:

result = ast.literal_eval(data)
于 2015-04-14T00:04:11.310 に答える
1

これで、引用符が全体を「ラップ」しているように見えます。これにより、すべての括弧が文字列になります。JSON の先頭と末尾の引用符を削除します。

また、JSON では、両方ではなく、'[' または '{' (通常は '{') のいずれかで構造を開始します。

于 2015-04-14T00:21:12.003 に答える
0

を使用する必要はありませんeval()。不正な文字を置き換えて (エスケープ\文字を使用)、次のように解析するだけでjson問題ありません。

resp = r.content.replace(" u \'", " \'").replace("\'", "\"")

json.loads(resp)
于 2015-04-14T00:36:37.100 に答える