如何从 通用JSON 获取 所有“ id”成员值 。 不知道它的结构 。因为它非常复杂并且它有很多子对象。它必须遍历所有子对象。
对于那些不断询问示例JSON在哪里的人来说。 我的问题是关于如何从具有该成员内部的任何通用JSON中提取成员值“ id”的成员值。
如果您不知道从某处接收到的JSON的结构,请务必注意JSON是“简单”的复合模式,您可以像其他任何复合结构一样遍历它。以下示例以JSON文本形式遍历完整结构,并打印任何名为“ id”的成员的路径。
procedure ParseJSON; var JSONText: string; JSON: ISuperObject; begin // Retrieve JSON as a string into JSONText variable any way you like. JSON := SO(JSONText); ProcessObject(JSON.AsObject); end; procedure ProcessObject(const aAsObject: TSuperTableString; const aPrefix: string = ''); var Names: ISuperObject; Name: string; Items: ISuperObject; Item: ISuperObject; idx: Integer; Value: string; ArrayItem: ISuperObject; begin if Assigned(aAsObject) then begin Names := aAsObject.GetNames; Items := aAsObject.GetValues; for idx := 0 to Items.AsArray.Length - 1 do begin Name := Names.AsArray[idx].AsString; Item := Items.AsArray[idx]; if Item.DataType = stObject then Value := '<Object>' else if Item.DataType = stArray then Value := '<Array>' else Value := Item.AsString; if SameText(Name, 'id') then WriteLn(Format('%s: %s', [aPrefix + Name, Value])); if Item.DataType = stArray then for ArrayItem in Item do ProcessObject(ArrayItem.AsObject, aPrefix + Name + '.'); if Item.DataType = stObject then ProcessObject(Item.AsObject, aPrefix + Name + '.'); end; end; end;