首页 > 解决方案 > 用 Dart 解码一个奇怪的 json 文件

问题描述

这需要使用 Dart 将其解码为可读的 JSON,这是问题所在。我不知道它是什么,我不知道该怎么做。

{
mifare: {
identifier: [4, 119, 66, 185, 196, 77, 112], 
mifareFamily: 2, 
historicalBytes: []
}, 
ndef: {
isWritable: true, 
maxSize: 492, 
cachedMessage: 
{records: 
[{identifier: [], 
typeNameFormat: 1, 
type: [84], 
payload: [2, 101, 110, 123, 39, 99, 109, 100, 39, 58, 39, 110, 101, 119, 95, 102, 114, 105, 101, 110, 100, 39, 44, 39, 117, 115, 101, 114, 39, 58, 39, 116, 101, 115, 116, 39, 125]}]}}}

有人知道怎么做吗?PS:“有效载荷”应该是这样的文字:

{'cmd':'new_friend','user':'test'}

标签: jsonflutterdartnfc

解决方案


如果要将其转换为文本字符串,则需要了解 NDEF 数据格式,因为这看起来像是读取带有 Ndef 记录的 NFC 卡的原始数据转储。

没有多少库只有编码方法的解码方法。

所以关键点是:-

typeNameFormat: 1是“众所周知的 Ndef 格式”的代码

type: [84]是 Ndef 文本记录的代码

这将引导您了解 Ndef 文本记录的规范 https://github.com/haldean/ndef/blob/master/docs/NFCForum-TS-RTD_Text_1.0.pdf

然后

payload: [2, 101, 110, 123, 39, 99, 109, 100, 39, 58, 39, 110, 101, 119, 95, 102, 114, 105, 101, 110, 100, 39, 44, 39, 117, 115, 101, 114, 39, 58, 39, 116, 101, 115, 116, 39, 125]

2语言标识符长度为 2 个字节

101是美国 ASCII 字符的十进制代码e

110是美国 ASCII 字符的十进制代码n

所以文字是英文的

123是美国 ASCII 字符的十进制代码{

等等

应该说这不是 JSON,而是 Javascript 中 Javascript 对象的转储


推荐阅读