使用 get 函数从 Solidity 结构接收 JSON [Express]

Posted

技术标签:

【中文标题】使用 get 函数从 Solidity 结构接收 JSON [Express]【英文标题】:Receive JSON from Solidity struct using get function [Express] 【发布时间】:2019-10-06 17:23:44 【问题描述】:

我需要这样的 JSON:

meteo: 'Fluorine', commento: 'F'

但是当我使用 get 函数时,我收到了这个:

[ '1meteo', '1commento', meteo: '1meteo', commento: '1commento' ]

我使用 Express 作为后端,这是我的代码:

app.get('/getallgiornale', async function (req, res) 

  // Get the contract instance.
  const networkId = await web3.eth.net.getId();
  const deployedNetwork = Giornaledeilavori.networks[networkId];
  const instance = new web3.eth.Contract( Giornaledeilavori.abi, deployedNetwork && deployedNetwork.address );

  // getAll
  const response = await instance.methods.getAll().call();
  res.send(response);

);

在 Solidity 中:

contract Giornaledeilavori 
struct Dati
string meteo;
string commento;

Dati[] public dati;

//getAll function:
function getAll() public returns (Dati[] memory)
  Dati[] memory d = dati;
  return d;


//set function:
  function setDato(string memory _meteo, string memory _commento) public  
    Dati memory newDati = Dati(
    meteo: _meteo,
    commento: _commento
  );
    dati.push(newDati);

Express中的set函数是这样的:


app.get('/setgiornale', async function (req, res) 
  var accounts = await web3.eth.getAccounts();
  // Get the contract instance.
  const networkId = await web3.eth.net.getId();
  const deployedNetwork = Giornaledeilavori.networks[networkId];
  const instance = new web3.eth.Contract( Giornaledeilavori.abi, deployedNetwork && deployedNetwork.address );

  // setDati
  instance.methods.setDato('1meteo','1commento').send(
    from: accounts[0],
    gas:"4500000",
    privateFor:['ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=']
  ,(error, transactionHash) => 
    if(error) 
      console.log(error);
      res.send(500);
     else 
      res.send(transactionHash);
    
  );
)

在 set 函数中,我尝试使用 json 而不是 send,但它不起作用。 我使用了 json stringify 但它不起作用。

如何接收 json?

感谢您的回答。

【问题讨论】:

【参考方案1】:

您应该在节点服务器中返回 json 格式:

return res.json( questions: questions );

由于这一行,您也会收到数组响应

dati.push(newDati);

【讨论】:

我知道,但我收到了这个回复:[ '1meteo', '1commento', meteo: '1meteo', commento: '1commento' ],而不是这个:` questions: questions ` 刚刚更新了我的答案。您需要找到一种方法来更改响应,因为您将数据推送到数组中 试试这个链接看看它是否适合你***.com/questions/2295496/convert-array-to-json

以上是关于使用 get 函数从 Solidity 结构接收 JSON [Express]的主要内容,如果未能解决你的问题,请参考以下文章

以太坊 Solidity 函数返回(returns)多个值 和 接收方式

如何将一组结构从 web3js 发送到 Solidity 合约?

区块链-智能合约工程师第三篇:Solidity进阶

solidity中转账接收者与发起者的问题

区块链-智能合约工程师第三篇:Solidity进阶

当结构有两个以上参数时,带有 array.push() 的 Solidity 函数不起作用