public void Add(JObject obj) { var topId = TsId.Create(); foreach (var(key, value) in obj) { Analyze(topId, key, value); } }
private void Analyze(TsId topId, object key, JToken?value) { if (key is string s) { key = string.Intern(s); } switch (value) { case JObject obj: { var nextId = TsId.Create(); _tuples.AddTuple(topId, key, nextId); foreach (var(ckey, cval) in obj) { Analyze(nextId, ckey, cval); } break; } case JArray arr: { var arrId = TsId.Create(); _tuples.AddTuple(topId, key, arrId); for (int idx = 0; idx < arr.Count; idx++) { Analyze(arrId, idx, arr[idx]); } break; } default: _tuples.AddTuple(topId, key, InterpretValue((JValue)value)); break; } }