@@ -406,22 +406,36 @@ class TJsonQuery : public TViewerPipeClient {
406
406
return ColumnPrimitiveValueToJsonValue (valueParser);
407
407
408
408
case NYdb::TTypeParser::ETypeKind::Optional:
409
- valueParser.OpenOptional ();
410
- if (valueParser.IsNull ()) {
411
- return NJson::JSON_NULL;
412
- }
413
- switch (valueParser.GetKind ()) {
414
- case NYdb::TTypeParser::ETypeKind::Primitive:
415
- return ColumnPrimitiveValueToJsonValue (valueParser);
416
- case NYdb::TTypeParser::ETypeKind::Decimal:
417
- return valueParser.GetDecimal ().ToString ();
418
- default :
419
- return NJson::JSON_UNDEFINED;
409
+ {
410
+ NJson::TJsonValue jsonOptional;
411
+ valueParser.OpenOptional ();
412
+ if (valueParser.IsNull ()) {
413
+ jsonOptional = NJson::JSON_NULL;
414
+ } else {
415
+ switch (valueParser.GetKind ()) {
416
+ case NYdb::TTypeParser::ETypeKind::Primitive:
417
+ jsonOptional = ColumnPrimitiveValueToJsonValue (valueParser);
418
+ break ;
419
+ case NYdb::TTypeParser::ETypeKind::Decimal:
420
+ jsonOptional = valueParser.GetDecimal ().ToString ();
421
+ break ;
422
+ default :
423
+ jsonOptional = NJson::JSON_UNDEFINED;
424
+ break ;
425
+ }
426
+ }
427
+ valueParser.CloseOptional ();
428
+ return jsonOptional;
420
429
}
421
430
422
431
case NYdb::TTypeParser::ETypeKind::Tagged:
423
- valueParser.OpenTagged ();
424
- return ColumnValueToJsonValue (valueParser);
432
+ {
433
+ NJson::TJsonValue jsonTagged;
434
+ valueParser.OpenTagged ();
435
+ jsonTagged = ColumnValueToJsonValue (valueParser);
436
+ valueParser.CloseTagged ();
437
+ return jsonTagged;
438
+ }
425
439
426
440
case NYdb::TTypeParser::ETypeKind::Pg:
427
441
return valueParser.GetPg ().Content_ ;
@@ -437,6 +451,7 @@ class TJsonQuery : public TViewerPipeClient {
437
451
while (valueParser.TryNextListItem ()) {
438
452
jsonList.AppendValue (ColumnValueToJsonValue (valueParser));
439
453
}
454
+ valueParser.CloseList ();
440
455
return jsonList;
441
456
}
442
457
@@ -448,6 +463,7 @@ class TJsonQuery : public TViewerPipeClient {
448
463
while (valueParser.TryNextElement ()) {
449
464
jsonTuple.AppendValue (ColumnValueToJsonValue (valueParser));
450
465
}
466
+ valueParser.CloseTuple ();
451
467
return jsonTuple;
452
468
}
453
469
@@ -459,6 +475,7 @@ class TJsonQuery : public TViewerPipeClient {
459
475
while (valueParser.TryNextMember ()) {
460
476
jsonStruct[valueParser.GetMemberName ()] = ColumnValueToJsonValue (valueParser);
461
477
}
478
+ valueParser.CloseStruct ();
462
479
return jsonStruct;
463
480
}
464
481
@@ -469,16 +486,21 @@ class TJsonQuery : public TViewerPipeClient {
469
486
valueParser.OpenDict ();
470
487
while (valueParser.TryNextDictItem ()) {
471
488
valueParser.DictKey ();
472
- TString key = valueParser. GetString ( );
489
+ NJson::TJsonValue jsonDictKey = ColumnValueToJsonValue (valueParser );
473
490
valueParser.DictPayload ();
474
- jsonDict[key ] = ColumnValueToJsonValue (valueParser);
491
+ jsonDict[jsonDictKey. GetStringRobust () ] = ColumnValueToJsonValue (valueParser);
475
492
}
493
+ valueParser.CloseDict ();
476
494
return jsonDict;
477
495
}
478
496
479
497
case NYdb::TTypeParser::ETypeKind::Variant:
480
- valueParser.OpenVariant ();
481
- return ColumnValueToJsonValue (valueParser);
498
+ {
499
+ valueParser.OpenVariant ();
500
+ NJson::TJsonValue jsonVariant = ColumnValueToJsonValue (valueParser);
501
+ valueParser.CloseVariant ();
502
+ return jsonVariant;
503
+ }
482
504
483
505
case NYdb::TTypeParser::ETypeKind::EmptyList:
484
506
return NJson::JSON_ARRAY;
0 commit comments