@@ -422,22 +422,36 @@ class TJsonQuery : public TViewerPipeClient {
422
422
return ColumnPrimitiveValueToJsonValue (valueParser);
423
423
424
424
case NYdb::TTypeParser::ETypeKind::Optional:
425
- valueParser.OpenOptional ();
426
- if (valueParser.IsNull ()) {
427
- return NJson::JSON_NULL;
428
- }
429
- switch (valueParser.GetKind ()) {
430
- case NYdb::TTypeParser::ETypeKind::Primitive:
431
- return ColumnPrimitiveValueToJsonValue (valueParser);
432
- case NYdb::TTypeParser::ETypeKind::Decimal:
433
- return valueParser.GetDecimal ().ToString ();
434
- default :
435
- return NJson::JSON_UNDEFINED;
425
+ {
426
+ NJson::TJsonValue jsonOptional;
427
+ valueParser.OpenOptional ();
428
+ if (valueParser.IsNull ()) {
429
+ jsonOptional = NJson::JSON_NULL;
430
+ } else {
431
+ switch (valueParser.GetKind ()) {
432
+ case NYdb::TTypeParser::ETypeKind::Primitive:
433
+ jsonOptional = ColumnPrimitiveValueToJsonValue (valueParser);
434
+ break ;
435
+ case NYdb::TTypeParser::ETypeKind::Decimal:
436
+ jsonOptional = valueParser.GetDecimal ().ToString ();
437
+ break ;
438
+ default :
439
+ jsonOptional = NJson::JSON_UNDEFINED;
440
+ break ;
441
+ }
442
+ }
443
+ valueParser.CloseOptional ();
444
+ return jsonOptional;
436
445
}
437
446
438
447
case NYdb::TTypeParser::ETypeKind::Tagged:
439
- valueParser.OpenTagged ();
440
- return ColumnValueToJsonValue (valueParser);
448
+ {
449
+ NJson::TJsonValue jsonTagged;
450
+ valueParser.OpenTagged ();
451
+ jsonTagged = ColumnValueToJsonValue (valueParser);
452
+ valueParser.CloseTagged ();
453
+ return jsonTagged;
454
+ }
441
455
442
456
case NYdb::TTypeParser::ETypeKind::Pg:
443
457
return valueParser.GetPg ().Content_ ;
@@ -453,6 +467,7 @@ class TJsonQuery : public TViewerPipeClient {
453
467
while (valueParser.TryNextListItem ()) {
454
468
jsonList.AppendValue (ColumnValueToJsonValue (valueParser));
455
469
}
470
+ valueParser.CloseList ();
456
471
return jsonList;
457
472
}
458
473
@@ -464,6 +479,7 @@ class TJsonQuery : public TViewerPipeClient {
464
479
while (valueParser.TryNextElement ()) {
465
480
jsonTuple.AppendValue (ColumnValueToJsonValue (valueParser));
466
481
}
482
+ valueParser.CloseTuple ();
467
483
return jsonTuple;
468
484
}
469
485
@@ -475,6 +491,7 @@ class TJsonQuery : public TViewerPipeClient {
475
491
while (valueParser.TryNextMember ()) {
476
492
jsonStruct[valueParser.GetMemberName ()] = ColumnValueToJsonValue (valueParser);
477
493
}
494
+ valueParser.CloseStruct ();
478
495
return jsonStruct;
479
496
}
480
497
@@ -485,16 +502,21 @@ class TJsonQuery : public TViewerPipeClient {
485
502
valueParser.OpenDict ();
486
503
while (valueParser.TryNextDictItem ()) {
487
504
valueParser.DictKey ();
488
- TString key = valueParser. GetString ( );
505
+ NJson::TJsonValue jsonDictKey = ColumnValueToJsonValue (valueParser );
489
506
valueParser.DictPayload ();
490
- jsonDict[key ] = ColumnValueToJsonValue (valueParser);
507
+ jsonDict[jsonDictKey. GetStringRobust () ] = ColumnValueToJsonValue (valueParser);
491
508
}
509
+ valueParser.CloseDict ();
492
510
return jsonDict;
493
511
}
494
512
495
513
case NYdb::TTypeParser::ETypeKind::Variant:
496
- valueParser.OpenVariant ();
497
- return ColumnValueToJsonValue (valueParser);
514
+ {
515
+ valueParser.OpenVariant ();
516
+ NJson::TJsonValue jsonVariant = ColumnValueToJsonValue (valueParser);
517
+ valueParser.CloseVariant ();
518
+ return jsonVariant;
519
+ }
498
520
499
521
case NYdb::TTypeParser::ETypeKind::EmptyList:
500
522
return NJson::JSON_ARRAY;
0 commit comments