Delphi 解析JSON[superobject.pas]

463 阅读1分钟
const
  JSON_STR = '{"ClassName":"小学一年级","Student1":[{"Name":"小印01","Sex":"男"},{"Name":"小印02","Sex":"女"}],"Student2":{"Name":"小印03","Sex":"男"}}';
var
  mJSON, mJSONItem: ISuperObject;
  mJSONArr: TSuperArray;
  i: Integer;
  mKey, mValue: string;
begin
  mJSON := SO(JSON_STR);       // 这句可以算是解析放入的 JSON 数据

  // 然后就可以通过 mJSON 获取到想得到的节点数据
  Memo_Log.Lines.Add(mJSON['ClassName'].AsString);
  Memo_Log.Lines.Add(mJSON['Student1'].AsString);
  Memo_Log.Lines.Add(mJSON['Student2'].AsString);

  mJSONItem := mJSON['Student2'];
  Memo_Log.Lines.Add(mJSONItem.AsJSon(True, False));      // 参数1:是否进行缩进,相当于格式美化  参数2:是否进行 escape【一种编码,可度娘】

  Memo_Log.Lines.Add('======================');

  mJSONArr := mJSON['Student1'].AsArray;
  Memo_Log.Lines.Add('这个 JSON 数组的长度: ' + IntToStr(mJSONArr.Length));
  // 可以通过循环的方式进行对内容进行读取
  for i := 0 to mJSONArr.Length - 1 do
  begin
    Memo_Log.Lines.Add(mJSONArr[i].AsString);
    // 再次解析其中的内容
    mJSONItem := mJSONArr.O[i];

    mKey := mJSONItem.AsObject.GetNames.AsArray[i].AsString;
    mValue := mJSONItem.AsObject.GetValues.AsArray[i].AsString;
    Memo_Log.Lines.Add('字段:' + mKey + '  ' + 'Value: ' + mValue);
    Memo_Log.Lines.Add('');
  end;

  Memo_Log.Lines.Add('======================');

  // 还可以使用 in 进行遍历
  for mJSONItem in mJSON['Student1'] do
  begin
    Memo_Log.Lines.Add('Name: ' + mJSONItem['Name'].AsString + '  ' + 'Sex: ' + mJSONItem['Sex'].AsString);
  end;
end;