2017-04-14 50 views
0

我使用C++生成器XE6 Pro和具有以下JSON響應空(見full response here):JSON嵌套對象是否顯示在休息調試器和RestResponse(XE6)

[ 
{ 
"id":"10186", 
"dataset":"krs_podmioty", 
"url":"https://api-v3.mojepanstwo.pl/dane/krs_podmioty/10186", 
"mp_url":"https://mojepanstwo.pl/dane/krs_podmioty/10186", 
"schema_url":"https://api-v3.mojepanstwo.pl/schemas/dane/krs_podmioty.json", 
"global_id":"3157847", 
"slug":"bank-millennium", 
"score":12.13878, 
"data": 
{ 
    "krs_podmioty.nazwa_organu_reprezentacji":"ZARZĄD", 
    "krs_podmioty.dotacje_ue_beneficjent_id":"0", 
    "krs_podmioty.liczba_prokurentow":0, 
    ... 
    "gpw":true 
} 
... 
] 

我使用REST組件,但當我試圖在REST調試器和設計/運行時解析這個時,我得到了"dataset":"krs_podmioty"元素的空值,但"gpw":true元素正確顯示。

我選擇了JSON根元素作爲DataObject,並標記爲嵌套 並將NestedElementDepth設置爲3.我也嘗試過其他設置,但沒有成功。

如何正確獲取"dataset":"krs_podmioty"值?

+0

UTF-8編碼問題的一些突出字符? –

+0

Arnaud Bouchez:懷疑它,解析並沒有失敗,因爲我得到了「數據」:「gpw」正確的值wchich是列表中的最後一個。 – Vancalar

+0

XE6 JSON解析器很奇怪,它可能會優雅地失敗...;) –

回答

0

這是我是如何能夠讀取這些值:

uses 
    System.Json; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
jsonText: string; 
jsonArray: TJsonArray; 
dataObj: TJsonObject; 
Jobj: TJsonObject; 
krsPodmiotyNazwaOrganuReprezentacjiValue: TJsonValue; 
krsPodmiotyDotacjeUeBeneficjentIdValue: TJsonValue; 
krsPodmiotyLiczbaProkurentowValue: TJsonValue; 
begin 
jsonText := '[{Your JSON content here}]'; 
Jobj := TJSONObject.ParseJSONValue(jsonText) as TJsonObject; 
jsonArray :=Jobj.GetValue('Dataobject') as TJsonArray; 
dataObj := (jsonArray.Items[0] as TJsonObject).GetValue('data') as TJsonObject; 
    krsPodmiotyNazwaOrganuReprezentacjiValue := dataObj.GetValue('krs_podmioty.nazwa_organu_reprezentacji'); 
    krsPodmiotyDotacjeUeBeneficjentIdValue := dataObj.GetValue('krs_podmioty.dotacje_ue_beneficjent_id'); 
    krsPodmiotyLiczbaProkurentowValue := dataObj.GetValue('krs_podmioty.liczba_prokurentow'); 
    MessageDlg(krsPodmiotyNazwaOrganuReprezentacjiValue.Value, mtInformation, [mbOK], 0, mbOK); 
    MessageDlg(krsPodmiotyDotacjeUeBeneficjentIdValue.Value, mtInformation, [mbOK], 0, mbOK); 
    MessageDlg(krsPodmiotyLiczbaProkurentowValue.Value, mtInformation, [mbOK], 0, mbOK); 
end; 

但是,如果你沒有使用任何來自System.Json命名空間,這可能不是回答你的問題。

+0

編輯爲實際編譯和運行,有點希望數據集解決方案,但文檔指出,不是每個數據對象都可以映射爲DataSet,所以我認爲這是事實。無論如何接受答案。 – Vancalar