【问题标题】:getQueryResult returns '[object Object]' instead of a valid json [hyperledger fabric]getQueryResult 返回 '[object Object]' 而不是有效的 json [hyperledger fabric]
【发布时间】:2019-07-16 02:52:51
【问题描述】:

合同代码:

async function queryCar(ctx, query) {

        let queryResult = await.ctx.stub.getQueryResult(query);
        console.log(queryResult.toString());

        return queryResult.toString();
        }

我如何在我的 API 中调用函数:

 var stringQuery = `{"selector": {"id": "17"}}`
    newQuery = await contract.evaluateTransaction('richQuery',stringQuery);
    console.log(JSON.parse(newQuery));

stringQuery 的值不是对CouchDB 的有效查询吗?

也许我使用了错误的函数,因为文档中提到了返回 StateQueryIterator 的函数。谁能帮助我了解如何在 javascript 中使用 getQueryResult 函数?谢谢!

【问题讨论】:

  • console.log(queryResult.toString()) 的结果是什么?猜猜 queryResult 可能是一个对象,而 queryResult.toString() 正在返回 [object, Object] 。只需尝试从 queryCar 返回 queryResult 并将其分配给 newQuery 而不使用 JSON.parse
  • 返回 JSON.stringify(queryResult);应该做的伎俩。如果您需要使用对象,请使用 JSON.parse(objectString) 将字符串转换回 JSON
  • @adiga 收到交易错误:Converting circular structure to JSON
  • @Spangle 同样的错误,Converting circular structure to JSON
  • 我使用的功能对吗?或者我对数据库的查询对吗?

标签: javascript node.js json object ecmascript-6


【解决方案1】:

这是因为queryResult 是一个对象,而Object.toString() 返回[object Object]。使用JSON.stringify将对象转换为字符串,然后JSON.parse将对象取回:

return JSON.stringify(queryResult);

还有:

console.log(JSON.parse(newQuery));

【讨论】:

  • 我收到一个事务错误说:Converting circular structure to JSON
  • 这是您使用的技术的问题。
  • 我不确定如何使用此功能,我认为这给了我问题。也许它没有从查询中获取任何结果到数据库。如果您了解这些功能,我将不胜感激有关如何使用这些功能的建议。谢谢! @杰克巴什福德
【解决方案2】:

现在解决了!问题在于我不知道如何迭代它正确返回的键。它的返回类型是 StateQueryIterator,我没有正确使用它。解决了这个问题,我得到了结果。

【讨论】:

  • 你能分享你用来解决这个问题的代码 sn-p 吗?我遇到了同样的错误并卡住了。
  • @KarthikSridharan 这是我用来理解“StateQueryIterator”返回类型的代码 sn-p:github.com/hyperledger/fabric-samples/blob/release-1.4/… 函数“queryAllCars”的主体包含如何迭代它的示例。这是一个'StateQueryIterator'的例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2019-10-18
  • 1970-01-01
  • 2013-05-05
  • 2016-03-08
  • 2017-04-11
相关资源
最近更新 更多