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