我正在尝试将Delphi中的数据列表返回到列表框中,我认为我没有理解它们如何组合在一起的基础。
这个answer让我得到了一个使用本地定义的数据集的工作示例。
我现在遇到的问题是我的Delphi代码返回的JSON对象的结构。
在上面的答案中,对象中只有1个“层”数据:
resultJSON = '{"1":"Firm 1","2":"Firm 2","3":"Firm 3"}';
但是我的Delphi代码似乎添加了一层。 查询如下:
function TServerMethods1.GetFirms(jobnumb: string): TJSONObject;
var
jso: TJSONObject;
begin
jso := TJSONObject.Create();
GetJobFirmList(jobnumb);
with SQLQuery1 do
while not Eof do
begin
jso.AddPair(TJSONPair.Create(FieldByName('firmref').AsString,
FieldByName('firmnaem').AsString));
Next;
end;
Result := jso;
end;
返回以下结果格式:
{"result":[{"1":"Firm 1","2":"Firm 2","3":"Firm 3"}]}
我要么需要减少方括号之外的代码,要么了解如何更好地迭代关卡。
这个answer here显示了如何在类似的结构中解析两个层,但我能想出的最好的两个层是以下哪个失败:
function getJobFirms()
{
var sel = $("#FirmList");
sel.empty();
var resultJSON = '{"result":[{"1":"Firm 1","2":"Firm 2","3":"Firm 3"}]}';
var result = $.parseJSON(resultJSON);
$.each(result, function() {
$.each(result.result, function(k,v) {
var opt = document.createElement('option');
opt.value = k;
opt.text = v;
sel.append(opt);
});
});
}
答案 0 :(得分:1)
就像你说的那样,你似乎错误地迭代了你的JSON结构。也就是说,result.result
是一个数组,所以你可以尝试这样的事情:
function getJobFirms()
{
var sel = $("#FirmList");
sel.empty();
var resultJSON = '{"result":[{"1":"Firm 1","2":"Firm 2","3":"Firm 3"}]}';
var result = $.parseJSON(resultJSON);
$.each(result.result, function(i, resultItem) {
$.each(resultItem, function(k, v) {
var opt = document.createElement('option');
opt.value = k;
opt.text = v;
sel.append(opt);
});
});
}
此外,如果result.result
数组中只有一个元素,则可以进一步减少代码:
function getJobFirms()
{
var sel = $("#FirmList");
sel.empty();
var resultJSON = '{"result":[{"1":"Firm 1","2":"Firm 2","3":"Firm 3"}]}';
var result = $.parseJSON(resultJSON);
$.each(result.result[0], function(k, v) {
var opt = document.createElement('option');
opt.value = k;
opt.text = v;
sel.append(opt);
});
}