簡體   English   中英

問題 Base64 編碼在 Python 和解碼在 Java

[英]Issue with Base64 encoding in Python and Decoding in Java

我有兩個包在運行,一個寫在 python 中,另一個寫在 Java 中。python package 編碼一個 json(字典)object 並將它發送到 java java

設python中的json為:

{ "name": "John", "Age": 24, "Income": None }

問題是 Java 不支持 None,它支持 null,因此它無法解析收到的 json 拋出錯誤“found None expected true, false, null, NaN”。

上面json在python中的Base64編碼:

eyAibmFtZSI6ICJKb2huIiwgIkFnZSI6IDI0LCAiSW5jb21lIjogTm9uZX0=

上面json在java中的Base64編碼:

eyAibmFtZSI6ICJKb2huIiwgIkFnZSI6IDI0LCAiSW5jb21lIjogbnVsbH0=

我還需要解析 Java 中的 null 值,不能簡單地將其從 json 中刪除。避免此錯誤的可能解決方案是什么?

問題是{ "name": "John", "Age": 24, "Income": None }不是有效的 JSON object 因為None不是有效的 JSON 值。

根據JSON 語法一個值可能是:

  • 一個字符串( "xy"
  • 一個數字 ( 12.345 )
  • 另一個 object ( { "prop": "value" } )
  • 數組 ( [1,2,3] )
  • true
  • false
  • null

如果您的 json 編碼器產生的值None它已損壞 - 也許您應該使用標准的 python 編碼器:

import json
r = {"name": "John", "Age": 24, "Income": None}
enc = json.JSONEncoder()
print(enc.encode(r))

生成有效的 JSON Java JSON 解析器可以解析:

{"name": "John", "Age": 24, "Income": null}

這些數據可以安全傳輸嗎? 我想是這樣。

使用以下示例:

import json
r = {"name": "Jöhn дое", "Age": 24, "Income": None}
enc = json.JSONEncoder()
print(enc.encode(r))

這被編碼成普通的 ASCII:

{"name": "J\u00f6hn \u0434\u043e\u0435", "Age": 24, "Income": null}

如果您不相信這對於通過網絡傳輸是安全的,您仍然可以使用 base64 編碼JSONEncoder.encode()方法的 output。

暫無
暫無

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

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