簡體   English   中英

從 JSON 字節數組中獲取字節到 Python 中

[英]Getting Bytes from JSON byte arrays into Python

我正在開發一個后處理應用程序,其中,在另一個基於 C# 的應用程序中,我將字節數組存儲到一個列表中,然后將所述列表保存到一個 JSON 文件中。 在這方面似乎一切正常,當我在另一個 C# 應用程序中重新打開字節數組時,讀取和解釋數據沒有問題。 我遇到頭痛的地方是將數據帶入 python 腳本以進行后期處理。 json 文件被正確攝取,但是字節數據的格式很奇怪,我無法解釋

import json

packetTypeDict = {"TxRx":0xABCD,"Cfg":0xA5A1}

def get_dictionary_from_json(jsonFilePath):
    with open(jsonFilePath) as f:
        jsonData = json.load(f)     
    return jsonData    

def parse_json_file(jsonFilePath):
    dataDict = get_dictionary_from_json(jsonFilePath)
    parse_data_list(dataDict["dataList"])

def parse_data_list(dataList):
    print(len(dataList))
    #flatten the list
    dataListFlat = [item for sublist in dataList for item in sublist]
    print(len(dataListFlat))
    print(dataListFlat)
    
if __name__ == "__main__":
    dataDict = parse_json_file(r"test.json")

當我運行它時,我最終在打印語句的輸出中(以及在我的調試器中)獲得了值,這些值似乎與我在 C# 中看到的不匹配。 "print(dataListFlat) 命令的輸出最終被生成為一個字符串列表,這樣輸出看起來像這樣

['z', 'a', 's', '4', 'A', 'A', 'E', 'A',...

在進入 JSON 之后和之前,在 C# 中表示的相同數組如下所示

[0]: 0xcd,[1]: 0xab, [2]: 0x38, [3]: 0x00, [4]: 0x01, [5]: 0x00, [6]: 0x00, [7]: 0x00...

這是我正在尋找的格式。 此外,JSON 文件中的數據與 Python 輸出中的數據完全相同

"dataList":["zas4AAEAAAAyVGotABAQAAAAAAAAAAAA...

最終,C# 實現可以訪問將 dataList 定義為字節數組列表的源類,而 python 端不知道。 所以我假設有某種方法可以將這些數據轉換為字節,但我對發生的事情有點不知所措。 我已經研究過使用解包、強制轉換為字節以及任何數量的其他方法。 我試過的任何東西似乎都不起作用。 此外,python 輸出和 C# 輸出之間並沒有真正的明顯模式。 然而很明顯,這是因為 Newtonsoft JSON 在處理相同的字符串時沒有問題。

當然,我在發布后不久就找到了答案。 研究了 JSON 如何編碼字節(特別是 byte[])並找到了一篇博客文章,其中討論了它們通常默認編碼為 base64。 能夠在數據包展平之前使用以下代碼對字節數組進行解碼

base64.b64decode(dataList[0])

這正確轉換了與 C# 中 JSON 反序列化方法的輸出匹配的單個數組。 在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM