【问题标题】:Blob and JSON: How to encode and decodeBlob 和 JSON:如何编码和解码
【发布时间】:2014-10-10 02:47:36
【问题描述】:

Dart 的 JSON.encode 和 JSON.decode 不适用于 BLOB SQL 类型。我正在寻找解决方案,并找到了很多关于为什么它不能开箱即用(或本机)的解释。

所以我想知道如何有效地使用 JSON 编码和解码 BLOB 数据。

编辑 1:添加示例。

我在 MySQL 数据库上有一个名为“some_text”的 TEXT 类型字段。以下是其内容: “这是 some_text 字段内容”。

当 SQLJocky 返回 some_text 时,它以“Blob”的形式存储在 Dart 中的 var 上。一个简单的“returnVar.runtimeType”即可确认。

所以现在我需要将此 Blob 文本“转换”为普通字符串,因为 JSON.encode/decode 不适用于第一个。

【问题讨论】:

  • JSON 没有“纯二进制”数据的数据类型。如果您想将任意 blob 数据放入 JSON 流中,您需要使用 Base64 或类似的方法对其进行转换。
  • import 'package:crypto/crypto.dart'; CryptoUtils.bytesToBase64(bytes);, CryptoUtils.base64StringToBytes(input); 如果您需要更多支持,您应该添加数据的确切 Dart 数据类型 BLOB SQL type 不是很具体。
  • Günter,该字段在 MySQL 数据库中设置为 TEXT。它来自 sqljocky,就像 Blob 一样(.runTimeType 这么说)。
  • 那么你的数据是什么样子的?
  • @Robert,这次我在该字段上处理一个简单的文本(实际上它包含 HTML 标记,如

      等)。但我试图了解 BLOB 是如何工作的,以便将来能够使用它保存文件(如图像文件)。

标签: json dart blob


【解决方案1】:

这应该可以工作,但未经测试

import 'package:crypto/crypto.dart';

var base64String = CryptoUtils.bytesToBase64(yourBlob.toBytes());

另一个方向

var blob = new Blob.fromBytes(CryptoUtils.base64StringToBytes(base64String));

【讨论】:

  • Günter,我对其进行了测试,设置为第一个 var (base64String) 的字符串全部“加扰”/编码。
【解决方案2】:

这个问题相当老了,但也许这对某人仍然有用。

我还需要从 sqljocky 返回为 Blob 的字段中提取字符串,我从 source code 中发现 Blob 有两种提取数据的方法 'toString()' 和 'toBytes()'。因此,为了对包含 Blob 数据的 sqljocky 行进行编码并将其提取为字符串,代码将如下所示:

import 'dart:convert';
import 'package:sqljocky5/sqljocky.dart';
...
var rowText = json.encode(row, toEncodable: (dynamic item) {
    if (item is Blob) {
        return item.toString();
    }
    return item;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多