我正在用本地json文件构建Flatter应用程序,我的json看起来像

[
    {
    "category": "ملابس",
    "count": 1,
    "description": "ملابس رجالي",
    "reference": "",
    "color": "أحمر "
    }
]

我需要用户在搜索时找到产品,例如 colored颜色 ,如果用户准确搜索"أحمИ",则效果很好,但如果输入的值为"احمД",则条件将为假,因此列表中不会出现任何内容.

搜索功能

  Future<void> searchJson(query) async {
    final jsondata = await rootBundle.loadString('assets/json/product.json');
    final list = await json.decode(jsondata) as List<dynamic>;
    List data = list
        .where((map) => map['color']
            .replaceAll(RegExp(String.fromCharCodes(arabicTashkelChar)), "")
            .contains(query))
        .toList();
    setState(() {
      items = data;
    });
  }

这是我的arabicTashkelChar个特殊阿拉伯字符列表

const Iterable<int> arabicTashkelChar = [
  1617,
  124,
  1614,
  124,
  1611,
  124,
  1615,
  124,
  1612,
  124,
  1616,
  124,
  1613,
  124,
  1618,
  625,
  627,
  655,
];

我用arabicTashkelChar英镑把这条线变成了阿拉伯语.

现在我想把string变成红色.

推荐答案

你需要做这样的东西

void main() {
  String myChar = 'أإآ';

  print(myChar); // result = أإآ
  String newChar = normalise(myChar);
  print(newChar ); // result ااا


}
  String myNormalise(String input) {
    return input
        // Replace Alifs with Hamza Above/Below and with Madda Above by Alif
        .replaceAll('\u0622', '\u0627')
        .replaceAll('\u0623', '\u0627')
        .replaceAll('\u0625', '\u0627');
  }

Edit

在您的设置中,您的搜索代码将是:

  Future<void> searchJson(query) async {
    final jsondata = await rootBundle.loadString('assets/json/product.json');
    final list = await json.decode(jsondata) as List<dynamic>;
    List data = list
        .where((map) => map['color']
            .replaceAll('\u0622', '\u0627')
            .replaceAll('\u0623', '\u0627')
            .replaceAll('\u0625', '\u0627')
            .replaceAll(RegExp(String.fromCharCodes(arabicTashkelChar)), '')
            .contains(query))
        .toList();
    setState(() {
      items = data;
    });
  }

另一种方法是在json文件中添加一个名为search and write的新元素,以供用户搜索,因此json将类似于:

[
    {
    "category": "ملابس",
    "count": 1,
    "description": "ملابس رجالي",
    "reference": "",
    "color": "أحمر ",
    "search":"احمر"
    }
]

然后改变

...
List data = list.where((map) => map['search'].contains(query)).toList();
...

这是你问题的答案.

Json相关问答推荐

Jolt转换问题—使用键查找匹配对象

当console.log返回TRUE值时,解析的JSON中的字段未定义

Vega-Lite(Deneb):难以将最小和最大值应用于折线图和文本标签以及线条末尾的点

对一些JSON模式验证的混淆

如何强制仅有一个元素的数组在JSON中生成方括号

转换为Json时忽略内部对象中的数组

JOLT 转换仅过滤一个字段

try 使用 JQ 转换 JSON 中过于复杂的对象数组

将 json 文件转换为 json 对象会打乱对象的顺序

使用带有逗号的字段名称构建 struct

jq:用列表包装所有第一级原子值

将文本转换为 python 列表

如何用 Xidel 正确读取这个 JSON 文件?

N1QL 搜索对象内的某些对象

如何判断字符串是否为json格式

直接从 Java 中的模型类创建 JSON 对象

我应该如何处理 JSON 中的 HATEOAS 链接和引用?

PostgreSQL 中的 JSON 模式验证?

有 Json 标签但未导出

Python 到 JSON 序列化在十进制上失败