replaceStringJsonPath function

String replaceStringJsonPath(
  1. String value,
  2. Map<String, dynamic> document, {
  3. bool? localized = true,
})

Implementation

String replaceStringJsonPath(String value, Map<String, dynamic> document,
    {bool? localized = true}) {
  var l1 =
      value.replaceAllMapped(RegExp(r'{(.*?)}', caseSensitive: false), (match) {
    var x = match.group(1) ?? '';
    if (x.isEmpty) return '';

    if (x.startsWith(r'$.') || x.startsWith(r'$[')) {
      try {
        x = x.trim();
        final _jsonPath = JsonPath(x);

        dynamic elements = _jsonPath.read(document).map((match) => match.value);

        dynamic result = elements.length > 0 ? elements.first : '';

        if (result is List || result is Map) {
          result = jsonEncode(result);
        }

        var r = result.toString();
        return (localized ?? true) ? localizedText(r) : r;
      } catch (e) {
        return '';
      }
    }
    if (x.startsWith('@')) {
      var messageCode = x.substring(1).trim();
      return localizedText(messageCode);
    }

    return match[0] ?? "";
  });

  return (localized ?? true) ? localizedText(l1) : l1;
}