从嵌套对象数组中抓取字符串



我有一个非常动态的json对象。下的示例

//sometime like this
{
"message": {
"aaa": [
"This is aaa"
],
"bbb": [
"This is bbb"
],
"ccc": [
"This is ccc",
"Maybe ddd"
]
}
}
//sometime like this
{
"message": {
"fff": [
"This is fff"
],
}
}
//and sometime like this
{
"message": "This is a message"
}

我希望提取数组中的任何String,并将其转换为字符串的数组。预期结果低于

//expected result 1
[
"This is aaa",
"This is bbb",
"This is ccc",
"Maybe ddd"
]
//expected result 2
[
"This is fff"
]
//expected result 3
[
"This is a message"
]

类似的东西?

Iterable<String> getStrings(dynamic object) sync* {
if (object is Iterable) {
for (final value in object) {
yield* getStrings(value);
}
} else if (object is Map) {
yield* getStrings(object.values);
} else if (object is String) {
yield object;
} else {
// ignore?
}
}
void main() {
final test1 = {
"message": {
"aaa": ["This is aaa"],
"bbb": ["This is bbb"],
"ccc": ["This is ccc", "Maybe ddd"]
}
};
final test2 = {
"message": {
"fff": ["This is fff"],
}
};
final test3 = {"message": "This is a message"};
print([...getStrings(test1)]);
// [This is aaa, This is bbb, This is ccc, Maybe ddd]
print([...getStrings(test2)]);
// [This is fff]
print([...getStrings(test3)]);
// [This is a message]
}

最新更新