Javascript 将未定义的JSON强制转换为新的JSON对象
未定义的JSON从URL api端点返回到Node.js/Express.js应用程序Javascript 将未定义的JSON强制转换为新的JSON对象,javascript,json,node.js,express,Javascript,Json,Node.js,Express,未定义的JSON从URL api端点返回到Node.js/Express.js应用程序http://someserver:someport/some\u api\u URL?\u var1=1。这个未定义的JSON输入将始终具有相同的格式,并且需要由接收代码转换为新的JSON对象(如下所示)。然后可以以各种方式处理新的JSON对象,包括传递到HTML中 OP问题: 需要对以下代码进行哪些具体更改,以便: 1.)格式为{“1”:“描述性字符串”}的JSON被转换到一个新定义的JSON对象中,该对象
http://someserver:someport/some\u api\u URL?\u var1=1
。这个未定义的JSON输入将始终具有相同的格式,并且需要由接收代码转换为新的JSON对象(如下所示)。然后可以以各种方式处理新的JSON对象,包括传递到HTML中
OP问题:
需要对以下代码进行哪些具体更改,以便: 1.)格式为
{“1”:“描述性字符串”}
的JSON被转换到一个新定义的JSON对象中,该对象名为dataElement
,具有两个属性,dataElement.dataKey
和dataElement.descriptionString
2.)发送回用户web浏览器的html响应包括dataElement.dataKey
和dataElement.descriptionString
的UI格式:
Index is: 1
Description is: descriptive string
要修改的示例代码:
首先,需要修改的代码是:
app.get('/', function (req, res) {
var url = 'http://someserver:someport/some_api_url?_var1=1'
http.get(url, function (resInner) {
var body = '';
resInner.on('data', function (chunk) {
body += chunk;
});
resInner.on('end', function () {
var fullResponse = JSON.parse(body);
// code to parse JSON into new JSON object, which is passed into HTML
var indexStr = key;
var descriptionStr = fullResponse[key];
var dataElement = {"dataKey" : key, "descriptionString" : descriptionStr};
var htmlResp = 'Index is: '+${dataElement.dataKey}+'<br> Description is: '+${dataElement.descriptionString};
res.send(htmlResp);
});
}).on('error', function (e) {
console.log("Got an error: ", e);
});
});
app.get('/',函数(req,res){
var url='1〕http://someserver:someport/some_api_url?_var1=1'
get(url,函数(resInner){
变量体=“”;
resInner.on('data',函数(块){
body+=块;
});
resInner.on('end',function(){
var fullResponse=JSON.parse(body);
//将JSON解析为新JSON对象的代码,该对象被传递到HTML中
var indexStr=键;
var descriptionStr=完整响应[键];
var dataElement={“dataKey”:key,“descriptionString”:descriptionStr};
var htmlResp='索引是:'+${dataElement.dataKey}+'
描述是:'+${dataElement.descriptionString};
res.send(htmlResp);
});
}).on('error',函数(e){
log(“出现错误:”,e);
});
});
当前错误:
目前,上述代码给出了以下错误:
/home/user/nodejs_apps/express_helloworld/myapp/app.js:139
var htmlResp = 'Index is: '+${dataElement.dataKey}+'<br> Description is: '+${dataElement.descriptionString};
^
SyntaxError: Unexpected token {
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:142:18)
at node.js:939:3
/home/user/nodejs\u apps/express\u helloworld/myapp/app.js:139
var htmlResp='索引是:'+${dataElement.dataKey}+'
描述是:'+${dataElement.descriptionString};
^
SyntaxError:意外标记{
在exports.runInThisContext(vm.js:53:16)
在模块处编译(Module.js:387:25)
在Object.Module._extensions..js(Module.js:422:10)
在Module.load(Module.js:357:32)
在Function.Module.\u加载(Module.js:314:12)
位于Function.Module.runMain(Module.js:447:10)
启动时(node.js:142:18)
在node.js:939:3
错误来自字符串连接,它似乎使用了一些无效的模板语言,以及未定义的key
变量,您必须实际使用Object.keys
等获取密钥
这样试试吧
app.get('/', function(req, res) {
var url = 'http://someserver:someport/some_api_url?_var1=1'
http.get(url, function(resInner) {
var body = '';
resInner.on('data', function(chunk) {
body += chunk;
});
resInner.on('end', function() {
var fullResponse = JSON.parse(body);
// code to parse JSON into new JSON object, which is passed into HTML
var keys = Object.keys(fullResponse);
var firstKey = keys[0];
var descriptionStr = fullResponse[firstKey];
var dataElement = {
"dataKey": firstKey,
"descriptionString": descriptionStr
};
var htmlResp = 'Index is: ' + dataElement.dataKey + '<br> Description is: ' + dataElement.descriptionString;
res.send(htmlResp);
});
}).on('error', function(e) {
console.log("Got an error: ", e);
});
});
app.get('/',函数(req,res){
var url='1〕http://someserver:someport/some_api_url?_var1=1'
get(url,函数(resInner){
变量体=“”;
resInner.on('data',函数(块){
body+=块;
});
resInner.on('end',function(){
var fullResponse=JSON.parse(body);
//将JSON解析为新JSON对象的代码,该对象被传递到HTML中
var keys=Object.keys(fullResponse);
var firstKey=keys[0];
var descriptionStr=fullResponse[firstKey];
var数据元素={
“数据键”:第一键,
“descriptionString”:descriptionStr
};
var htmlResp='索引为:'+dataElement.dataKey+'
说明为:'+dataElement.descriptionString;
res.send(htmlResp);
});
}).on('error',函数(e){
log(“出现错误:”,e);
});
});
在本例中,您试图使用,但使用不正确,导致错误。这是模板字符串的格式:
`Hello World, the expression "1+2" evaluates to ${1+2}` ==> `Hello World, the expression "1+2" evaluates to 3`
模板字符串使用反勾号,这是您在SE插入内联代码时使用的。因此,您的问题行应该如下所示:
var htmlResp = `Index is: ${dataElement.dataKey}`<br> Description is: `${dataElement.descriptionString}`;
var htmlResp=`索引为:${dataElement.dataKey}`
说明为:${dataElement.descriptionString}`;
除了那个语法错误,我看不出您的代码有任何问题,但谁知道呢?;)
希望我能有所帮助!key从哪里来?因此,您在其他地方定义了一个变量
key
,API返回有效的JSON,其中一个键实际上与您将key
变量设置为相同,因此您没有key
变量“原创海报”是你吗?不管怎样,试试这个->是的,没有想到“原创海报”,我通常把OP读成“.问问题的人”,然后有点困惑?如果需要很长时间,那么必须是调用和异步函数,解析一个小对象和访问密钥等。应该只需要几毫秒。