【问题标题】:unable to parse json string in node js无法解析节点 js 中的 json 字符串
【发布时间】:2022-11-03 02:47:39
【问题描述】:

我有这个下面的函数,我在其中调用另一个函数"uploadContentVersion",它是一个请求 POST。这还包括我在下面的函数中捕获的回调。

我面临的问题是这条线"console.log(data)" 给了我这样的结果

{"id":"11111111111111","success":true,"errors":[]}

但是当我尝试打印console.log(data.id) 时,我变得不确定。不确定我在哪里做错了。

const createFileFromJSON = async() => {
    if (fs.existsSync('./templates/officetemplate.docx')) {
      const templateFile = fs.readFileSync('./templates/officetemplate.docx');
      //console.log(templateFile.toString('utf8'))
      var doc = await handler.process(templateFile, data);
      // 3. save output
      fs.writeFileSync('./templates/' + data.accPlanId + '.docx', doc);
      uploadContentVersion(sfdc_token.access_token, sfdc_token.instance_url, data.accPlanId, function(data) {

        var conn = new sf.Connection({});
        conn.initialize({
          instanceUrl: sfdc_token.instance_url,
          accessToken: sfdc_token.access_token
        });
        console.log(data) -- > {
          "id": "11111111111111",
          "success": true,
          "errors": []
        }
        console.log(data.id) -- > undefined
        attachFileToRecord(conn, data)
      })
      // console.log(contentversionres)
    } else {
      console.log('Template is not present..')
    }



    var uploadContentVersion = function(token, instUrl, fname, callback) {

      var options = {
        'method': 'POST',
        'url': some url,
        'headers': {
          'Authorization': 'Bearer ' + token,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          "VersionData": fs.readFileSync(`./templates/${fname}.docx`).toString('base64')
        })

      };
      request(options, function(error, response) {
        if (response.statusCode === 201) {
          callback(response.body);
        }
        if (error) throw new Error(error);
      });
    }

【问题讨论】:

  • 我要检查的第一件事是 JSON 是否符合您的预期。没有它,错误可能在它的生成中,或者在您的请求中。
  • {"id":"11111111111111","success":true,"errors":[]} --> 这是我收到的正确 JSON。
  • 对不起,错过了。

标签: javascript node.js


【解决方案1】:

您的问题似乎是您收到 data 作为细绳,而不是作为对象。在您的回答中,您回答说添加 JSON.parse() (mdn) 有效。这是因为 JavaScript 解释器无法知道您是否希望将其视为对象,因此 JSON.parse 函数用于解决此问题。还有一个相反的 JSON.stringify。

【讨论】:

    【解决方案2】:

    我不知道是什么问题。我刚刚从请求中传递了JSON.parse(response.body).id,它解决了这个问题

    【讨论】:

    • 原因是data 是字符串类型,因此data.id 导致未定义。只要您使用JSON.parse,它就会被转换为javascript 可以“读取”的对象。
    猜你喜欢
    • 1970-01-01
    • 2019-01-14
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多