У меня есть огромный файл json ~ 1000 + lines. Я хотел реализовать две вещи.json parsing using perl
1) В файле JSon, если "Id" : "232799"
затем назначить "s"
в "1861"
Я сделал это с помощью decode_json. Он работает так, как ожидалось.
2) Увеличьте число version
на 1 и сохраните файл в определенном каталоге. Я хочу, чтобы это произошло в цикле.
Я считаю, что decode_json следует использовать для анализа json-объекта/json-массива. Однако версия является первой строкой в файле. Я не уверен, что можно использовать декодирование. Все предложения?
{
"version": "16300173",
"con": {
"s1": {
"key": false,
"global": {
"cu": [
{
"Id": "232799",
"s": 1861,
"Sps": "xx",
"cId": "xyzzde",
"pat": "-123456789",
"Config": true,
"auth": [
{
"Type": "5",
"dir": "in"
},
{
"Type": "6",
"dir": "out"
}
],
сценарий:
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
my $json;
{
open my $fh, "<", "https://stackoverflow.com/a/etc/cm/nw/st/cfg.json"
or die("Can't open file \"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json\": $!\n");
local $/;
$json = <$fh>;
}
my $data = decode_json($json);
for my $customers (@{ $data->{global}{cu} }) {
$customers->{s} = 1861
if $customers->{id} ==237299;
}
$json = JSON->new->utf8->pretty->encode($data);
{
open my $fh, ">" ,"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json"
or die("Can't open file \"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json\": $!\n");
local $/;
print $fh $json;
}
'$ data-> {global} {cu} 'должно быть' $ data -> {con} {s1} {global} {cu} ', а версия - это просто' $ data -> {versio п} '. – choroba
@choroba Не могли бы вы рассказать мне, как увеличить номер версии? – virat
'$ data -> {version} ++;' должен это делать. – choroba