2017-05-25 31 views
3

我已經閱讀了很多關於此問題的問題,但找不到任何與str。將字符串存儲到json對象python

我得到了一個長的字符串,其中包含16個字節的名稱,後面跟着4個字節的數字,並對N個人重複。例如如下:

*編輯:1)字符串是MSG

2)加入到麥克風預期輸出

msg = 'George\0\0\0\0\0\0\0\0\0\0' + '0095' + 'Mikeeeeeeeeeeee\0' + '0100' + 'Kelly\0\0\0\0\0\0\0\0\0\0\0' + '0000' 

現在我需要將這些數據存儲到JSON對象。我試過循環,但它總是重寫之前存儲的數據。我想要的東西可以像下面那樣工作,但是對於更長的字符串,因爲每個數據的msg [start:end]都是完全延遲的。

data = {} 
data[msg[0:16]] = { 
    "marks" : msg[16:20] 
} 
data[msg[20:36]] = { 
    "marks" : msg[36:40] 
} 
data[msg[40:56]] = { 
    "marks" : msg[56:60] 
} 

預期輸出:

{ 
"George\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000": { 
    "marks": "0095" 
    }, 
"Kelly\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000": { 
    "marks": "0000" 
    }, 
"Mikeeeeeeeeeeee\u0000": { 
    "marks": "0100" 
    } 
} 

感謝

+0

多數民衆贊成多數民盟這是因爲你正在使字符串的每個部分的對象,而不是使其成爲預期的嵌套對象 – warl0ck

+0

你已經發布'字符串變量組成的一些文本塊,然後你正在使用'msg'變量。顯示'msg'的值 – RomanPerekhrest

+0

以及msg字符串中的'Mikee'如何? – warl0ck

回答

1

假設你希望所有的對象細節,即喬治,麥克和凱利在data和您味精是一個長度爲60只,而你是訪問76以後..因此開始附加你的對象。你應該根據你想要像輸出結果是什麼什麼使一個嵌套的JSON:

length = len(msg) 
i = 0 
data = {} 
while i < length: 
    data[msg[i:i+16]] = {"marks" : msg[i+16:i+20]} 
    i += 20 
print data 

輸出:

{'George\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': {'marks': '0095'}, 'Mikeeeeeeeeeeee\x00': {'marks': '0100'}, 'Kelly\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': {'marks': '0000'}} 

希望這有助於

+0

'msg'由服務器發送,因此我永遠不會有實際的數據長度。 我希望擺脫在msg數[開始:結束] –

+0

好,所以你想動態創建的數據對象?這是你想要你的輸出的方式嗎? msg字符串的長度將始終爲20的倍數,因爲您的完整解析是基於該 – warl0ck

+0

是的。這將減輕對象的創造,而不使用'幻數' –

1
import re 
dict(re.findall(r'(\D+)(\d{4})', string)) 

它將返回應答等。

{'George\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': '0095', 'Kelly\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': '0000', 'Mikeeeeeeeeeeee\x00': '0100'} 

就像你現在把它當作字典,這可以以你想要的任何格式進行更改。