Flutter JSONata Package
A Flutter package that provides JSONata query language support for data transformation and querying.
Features
- Execute JSONata queries on JSON data
- Transform and filter JSON data
- Supports complex querying operations
- Custom function registration
- Error handling and validation
- Platform support for both Android and iOS
Installation
Add this to your package's pubspec.yaml file:
dependencies:
jsonata_flutter: ^1.0.0
Android Setup
- Set the minimum SDK version to 21 in your
android/app/build.gradleorandroid/app/build.gradle.ktsfile:
android {
defaultConfig {
minSdkVersion 21
// or in kts: minSdk = 21
}
}
- Add the JitPack repository to your
android/build.gradlefile:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Or if using Kotlin DSL (build.gradle.kts):
allprojects {
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}
- Add the JavaScriptCore dependency to your
android/app/build.gradleorandroid/app/build.gradle.ktsfile:
dependencies {
implementation 'com.github.fast-development.android-js-runtimes:fastdev-jsruntimes-jsc:0.3.4'
}
Or in Kotlin DSL:
dependencies {
implementation("com.github.fast-development.android-js-runtimes:fastdev-jsruntimes-jsc:0.3.4")
}
- For release configuration, update your
android/app/build.gradlefile'sbuildTypessection:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- Create a file named
proguard-rules.proin theandroid/appdirectory and add the following content:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class de.prosiebensat1digital.** { *; }
Usage
Basic Usage
```dart
import 'package:jsonata_flutter/jsonata_flutter.dart';
void main() async { // Initialize Jsonata final jsonata = Jsonata(data: '{"name": "John", "age": 30}');
// Simple property access final result = await jsonata.evaluate(expression: r'$.name'); print(result.data); // Output: John
// Don't forget to dispose jsonata.dispose(); }
### Advanced Querying Examples
#### Array Filtering
```dart
final jsonata = Jsonata(data: '[1, 2, 3, 4, 5]');
final result = await jsonata.evaluate(expression: r'$[$ >= 3]');
// Result: [3, 4, 5]
Object Transformation
final jsonata = Jsonata(data: '''
{
"firstName": "John",
"lastName": "Doe",
"age": 30
}
''');
final result = await jsonata.evaluate(expression: r'''
{
"fullName": $.firstName & " " & $.lastName,
"isAdult": $.age >= 18
}
''');
// Result: {"fullName": "John Doe", "isAdult": true}
Array Mapping
final jsonata = Jsonata(data: '''
{
"numbers": [1, 2, 3, 4, 5]
}
''');
final result = await jsonata.evaluate(expression: r'$.numbers.(10 * $)');
// Result: [10, 20, 30, 40, 50]
Error Handling
final jsonata = Jsonata(data: '{"name": "John"}');
final result = await jsonata.evaluate(expression: r'$.age');
if (result.isError) {
print('Error: ${result.error}');
} else {
print('Result: ${result.data}');
}
Expression Validation
final jsonata = Jsonata();
final isValid = await jsonata.validateExpression(r'$.name');
print(isValid); // true or false
Custom Functions
final jsonata = Jsonata(
data: '{"numbers": [1, 2, 3, 4, 5]}',
functions: {
'mySum': '''
function(array) {
return array.reduce((acc, val) => acc + val, 0);
}
'''
},
);
final result = await jsonata.evaluate(expression: r'$sum($.numbers)');
// Result: 15
License
This package is available under the MIT License.