|
質問者さんは No102174 を参考に解決できたそうなので、どのように解決したのか情報提供をお願い
したのですが、スレッドを放棄して去ってしまったようなので、自分が案を書いておきます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
string json1 = "{\"99\":{\"id_1\":{\"101\":1,\"102\":1,\"103\":1,\"104\":1,\"105\":1,\"106\":1},\"id_2\":{\"201\":1,\"202\":1,\"203\":1},\"id_3\":{\"301\":1}}}";
Console.WriteLine(Convert(json1));
// 結果:
// {"newname":99,"id_1":[101,102,103,104,105,106],"id_2":[201,202,203],"id_3":[301]}
string json2 = "{\"99\":{\"id_1\":null,\"id_2\":{\"201\":1,\"202\":1,\"203\":1},\"id_3\":{\"301\":1}}}";
Console.WriteLine(Convert(json2));
// 結果:
// {"newname":99,"id_1":null,"id_2":[201,202,203],"id_3":[301]}
}
private static string Convert(string json)
{
JsonElement jelem1 = JsonSerializer.Deserialize<JsonElement>(json);
StringBuilder sb = new StringBuilder();
sb.Append("{\"newname\":");
foreach (JsonProperty jprop in jelem1.EnumerateObject())
{
sb.Append(jprop.Name); // {"newname":99
foreach (JsonProperty jprop1 in jprop.Value.EnumerateObject())
{
if (jprop1.Value.ValueKind == JsonValueKind.Null)
{
sb.Append($",\"{jprop1.Name}\":null"); // {"newname":99,"id_1":null
}
else
{
sb.Append($",\"{jprop1.Name}\":["); // {"newname":99,"id_1":[
foreach (JsonProperty jprop2 in jprop1.Value.EnumerateObject())
{
sb.Append($"{jprop2.Name},"); // {"newname":99,"id_1":[101,102,103,104,105,106,
}
sb.Replace(',', ']', sb.Length - 1, 1); // {"newname":99,"id_1":[101,102,103,104,105,106]
}
}
}
sb.Append("}");
return sb.ToString();
}
}
}
|