как сгруппировать json?
нужно сгруппировать следующий json по ключу "name" и суммировать значения ключа "economy":
[
{
"name": "name1",
"economy": 30.0,
"abp": "abp1_1"
},
{
"name": "name1",
"economy": 20.0,
"abp": "abp1_2"
},
{
"name": "name2",
"economy": 32.0,
"abp": "abp2_1"
},
{
"name": "name2",
"economy": 31.2,
"abp": "abp2_2"
}
]
на выходе я должен получить следующее:
[
{
"name": "name1",
"economy": 40.0,
"items": [
{
"name": "name1",
"economy": 30.0,
"abp": "abp1_1"
},
{
"name": "name1",
"economy": 20.0,
"abp": "abp1_2"
}
]
},
{
"name": "name2",
"economy": 63.2,
"items": [
{
"name": "name2",
"economy": 32.0,
"abp": "abp2_1"
},
{
"name": "name2",
"economy": 31.2,
"abp": "abp2_2"
}
]
}
]
Ответы (1 шт):
По первому запросу, выдаётся библиотека
Документация, вязатя из библиотеки:
Импорт либо
import "package:serialization/serialization.dart"
или
import "package:serialization/serialization_mirrors.dart"
в зависимости от того, нужны ли вам зеркальные правила. Они более удобны, но вызывают увеличение размера кода в dartj2s.
Чтобы использовать трансформатор, включите в pubspec что-то вроде
transformers:
- serialization :
$include: ["lib/stuff.dart", "lib/more_stuff.dart"]
Затем настройте сгенерированные правила в экземпляре сериализации, а затем вызовите функцию write(). Правила сериализации будут называться так же, как имя файла модели с _serialization_rules добавлением к нему , так что в случае stuff.dartstuff_serialization_rules.dart, если он находится в том же каталоге, что и оригинал.
Обычно вы никогда не увидите эти файлы, потому что трансформатор создает его на лету, и он отправляется непосредственно в pub serve или в dart2js, никогда не записываясь на диск. Чтобы увидеть сгенерированный код, запустите pub build в режиме отладки, например , если в каталоге пакета есть программа binдля запуска чего -либо с помощью этих файлов, то
pub build --mode=debug bin
будет генерировать код для этого, а также регистрировать, какие файлы были сгенерированы, в виде
Generated serialization rules in my_package|lib/stuff_serialization_rules.dart
Кроме того, можно запустить код трансформатора вне трансформатора, что полезно для отладки или использования кода по -другому. Пример этого см. в разделе "test/transformer/generate_standalone.dart".
Код каталога bin будет выглядеть примерно так.
import 'package:my_package/stuff_serialization_rules.dart' as foo;
...
var serialization = new Serialization();
foo.rules.values.forEach(serialization.addRule);
...
sendToClient(serialization.write(somePerson));
а на клиенте сделайте что-нибудь вроде
p = readFromServer(personId).then((data) => serialization.read(data));
В качестве альтернативы, если вы используете зеркальные правила, просто сообщите сериализации, какие классы могут быть сериализованы.
var serialization = new Serialization()
..addRuleFor(Person);
..addRuleFor(Address);
serialization.write(address);
Для получения более конкретных примеров см. testКаталог, и особенно для примеров трансформатора может быть полезно посмотреть pubspec.yamlна этот пакет и test/transformer каталог.
Если вдруг, библиотека перестанет поддерживаться, то будущие поситители смогут найти второй вариант решения данной проблемы тут