Javascript 将未定义的JSON强制转换为新的JSON对象

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对象中,该对象

未定义的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对象中,该对象名为
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读成“.问问题的人”,然后有点困惑?如果需要很长时间,那么必须是调用和异步函数,解析一个小对象和访问密钥等。应该只需要几毫秒。