如何修复 json 代码作为对象对象进入 html 下拉列表
How to fix json code coming into html dropdown as object Object
我有一个 InDesign 脚本的 HTML 下拉列表,当我从文件中拉出 JSON 时,它作为对象返回。我不知道我做错了什么。
我在这里尝试了很多答案,但 none 正在使用我的代码。
我的HTML:
<h4>Design Tools</h4>
<select id="swatchNumber" onchange="swatchIndex()" class="custom-select"></select>
我的 jsx:
function swatchIndex() {
var doc, swatches, json, n, l, swatch;
doc = app.activeDocument;
swatches = doc.swatches;
json = [];
l = swatches.length;
for (n = 0; n < l; n++) {
swatch = swatches[n];
json[n] = '"' + n + '": {' +
'"name": "' + swatch.name + '"}'
}
// prepare the JSON as a string
json = '{' + json.join(',') + '}';
return json;
}
我的javascript:
var callBack = function (result) {
try {
var swatchesConv = JSON.parse(result);
var select = document.createElement('SELECT');
select.name="swatchNumber";
select.id="swatchNumber";
document.body.appendChild(select);
Object.keys(swatchesConv).forEach(function(result){
document.getElementById('swatchNumber').innerHTML +='<option value="'+result+'">'+swatchesConv[result]+'</option>'
})
alert(result);
} catch (e) { alert(e.message); }
// alert("Wrong");
}
csInterface.evalScript('swatchIndex()', callBack);
弹出到我的警报中的实际 JSON(结果):
{“0”: {“name”: “None”}, “1”: {“name”: “注册”), “2”: {“name”: “Paper”}, “3” : {“名字”: “黑色”}}
当我加载应用程序时,我收到弹出 JSON 的警报,但下拉列表显示正确的数量,但每个索引只显示对象 Object
因为 swatchesConv
是
{
“0”: {“name”: “None”},
“1”: {“name”: “Registration”),
“2”: {“name”: “Paper”},
“3”: {“name”: “Black”}
}
Object.keys(swatchesConv).forEach
中的result
是键,swatchesConv[result]
的值是键的对象。因此,对于键 0
它将是 {“name”: “None”}
.
要显示名称,您必须使用:
'<option value="'+result+'">'+swatchesConv[result].name+'</option>'
或
'<option value="'+result+'">'+swatchesConv[result]['name']+'</option>'
创建 select 的选项时。
我有一个 InDesign 脚本的 HTML 下拉列表,当我从文件中拉出 JSON 时,它作为对象返回。我不知道我做错了什么。
我在这里尝试了很多答案,但 none 正在使用我的代码。
我的HTML:
<h4>Design Tools</h4>
<select id="swatchNumber" onchange="swatchIndex()" class="custom-select"></select>
我的 jsx:
function swatchIndex() {
var doc, swatches, json, n, l, swatch;
doc = app.activeDocument;
swatches = doc.swatches;
json = [];
l = swatches.length;
for (n = 0; n < l; n++) {
swatch = swatches[n];
json[n] = '"' + n + '": {' +
'"name": "' + swatch.name + '"}'
}
// prepare the JSON as a string
json = '{' + json.join(',') + '}';
return json;
}
我的javascript:
var callBack = function (result) {
try {
var swatchesConv = JSON.parse(result);
var select = document.createElement('SELECT');
select.name="swatchNumber";
select.id="swatchNumber";
document.body.appendChild(select);
Object.keys(swatchesConv).forEach(function(result){
document.getElementById('swatchNumber').innerHTML +='<option value="'+result+'">'+swatchesConv[result]+'</option>'
})
alert(result);
} catch (e) { alert(e.message); }
// alert("Wrong");
}
csInterface.evalScript('swatchIndex()', callBack);
弹出到我的警报中的实际 JSON(结果): {“0”: {“name”: “None”}, “1”: {“name”: “注册”), “2”: {“name”: “Paper”}, “3” : {“名字”: “黑色”}}
当我加载应用程序时,我收到弹出 JSON 的警报,但下拉列表显示正确的数量,但每个索引只显示对象 Object
因为 swatchesConv
是
{
“0”: {“name”: “None”},
“1”: {“name”: “Registration”),
“2”: {“name”: “Paper”},
“3”: {“name”: “Black”}
}
Object.keys(swatchesConv).forEach
中的result
是键,swatchesConv[result]
的值是键的对象。因此,对于键 0
它将是 {“name”: “None”}
.
要显示名称,您必须使用:
'<option value="'+result+'">'+swatchesConv[result].name+'</option>'
或
'<option value="'+result+'">'+swatchesConv[result]['name']+'</option>'
创建 select 的选项时。