擅长:python、mysql、java
<p>错误是明确的。在Python dict中,键可以是任何<em>可哈希</em>类型,包括元组、冻结集或冻结dict(但既不是列表,也不是集合或dict)</p>
<p>但在Json对象中,字典键只能是字符串、数字(int或float)、布尔值或特殊对象None</p>
<p>长话短说,您的输入字典不能直接转换为Json</p>
<p>可能的解决办法:</p>
<ul>
<li><p>使用不同的序列化工具。例如,pickle可以接受任何Python类型,但不能移植到非Python应用程序。但是,如果同时编写序列化和反序列化部分,也可以使用自定义序列化格式</p>
</li>
<li><p>将键转换为字符串。在反序列化时,您只需将字符串转换回具有<code>ast.literal_evel</code>的元组:</p>
<pre><code> js = json.dumps({str(k): v for k,v in data.items()})
</code></pre>
<p>给予:<code>{"('analogInput', 18)": [["objectName", "AI8-Voltage"], ["presentValue", 238.3], ["units", "Volts"]], "('analogInput', 3)": [["objectName", "AI3-Pulse"], ["presentValue", 100], ["units", "Amp"]]}</code></p>
<p>您可以使用以下内容将其加载回:</p>
<pre><code> data2 = {ast.literal_eval(k): v for k,v in json.loads(js).items()}
</code></pre>
<p>给予<code>{('analogInput', 18): [['objectName', 'AI8-Voltage'], ['presentValue', 238.3], ['units', 'Volts']], ('analogInput', 3): [['objectName', 'AI3-Pulse'], ['presentValue', 100], ['units', 'Amp']]}</code></p>
<p>您可以看到json转换将元组更改为列表</p>
</li>
</ul>