【问题标题】:Decoding a weird json file with Dart用 Dart 解码一个奇怪的 json 文件
【发布时间】:2021-12-19 14:13:50
【问题描述】:

这需要用 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'}

【问题讨论】:

  • 你为什么不问问制作该文件的一方?我的意思是他们应该知道,对吧?
  • 这不是一个“奇怪”的 JSON 文件,因为这不是有效的 JSON。您将花费更多时间尝试将此文件动态转换为可读的 JSON,而不是按原样解析它。也就是说,这是一种相当复杂的数据格式,因此自己创建解析器并非易事,而且可能没有现有的解析器。您应该向向您提供这些数据的人询问如何使用这些数据的建议。
  • 虽然现在我看了一下,但您可以通过简单的正则表达式搜索将这些数据转换为可读的 JSON,并用引号替换所有字母数字字符串(不包括“true”和“false”)。虽然这是基于这个示例,但不能保证它适用于您收到的每个文件。

标签: json flutter dart nfc


【解决方案1】:

如果要将其转换为文本字符串,则需要了解 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 个字节

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

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

所以文字是英文的

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

等等

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

【讨论】:

  • 谢谢!这真的对我有帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
相关资源
最近更新 更多