如何使用chainlink API消费者合约从json响应中获取深度嵌套的值

How to access deeply nested value from json response using chainlink API consumer contracts

提问人:Srikanth Alva 提问时间:6/15/2023 更新时间:6/15/2023 访问量:14

问:

我已经测试了与 api 的连接,它有效。在 Polygon 孟买测试网上对此进行测试。

我正在尝试从 json 响应中访问 duration.value 和 distance.value。我无法满足我的请求。

API 响应

   "destination_addresses" : [
      "Dharmapuri, Forest Colony, Tajganj, Agra, Uttar Pradesh 282001, India"
   ],
   "origin_addresses" : [
      "Netaji Subhash Marg, Lal Qila, Chandni Chowk, New Delhi, Delhi 110006, India"
   ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "137 mi",
                  "value" : 220239
               },
               "duration" : {
                  "text" : "3 hours 12 mins",
                  "value" : 11503
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

Solidity 代码


 constructor() {
           
            setChainlinkToken(0x326C977E6efc84E512bB9C30f76E30c160eD06FB); // 
            setChainlinkOracle(0x40193c8518BB267228Fc409a613bDbD8eC5a97b3);
            oracle = 0x40193c8518BB267228Fc409a613bDbD8eC5a97b3;
            jobId ="ca98366cc7314957b8c012c72f05aeeb"; //  for uint256
            //jobId = "7d80a6386ef543a3abb52817f6707e3b"; // for string
            fee = (1 * LINK_DIVISIBILITY) / 10; // 0.1 * 10**18 (Varies by network and job)
        }


        function requestRide() public {
            // Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfillPrice.selector);
            // request.add("url", "https://maps.googleapis.com/");
            // request.add("queryParams", string(abi.encode("Pickup=", _pickup, "&drop=", _drop, "&api_key=", getApiKey())));
            Chainlink.Request memory req = buildChainlinkRequest(
            jobId,
            address(this),
            this.fulfillDistance.selector
            );
            // AIzaSyDF0rgz17j9QPI94NwD8RPic8ktViw8yIU
            req.add(
            "get",
            "https://maps.googleapis.com/maps/api/distancematrix/json?destinations=Taj%20Mahal&origins=Red%20Fort&units=imperial&key=API_KEY"
            );

            req.add("path", "rows,0,elements,0,distance,value");
            sendChainlinkRequest(req, fee);
    
        }

尝试了这些变化

  1. req.add(“路径”, “行,0,元素,0,距离,值”);
  2. req.add(“路径”, “rows.0.elements.0.distance.value”);
  3. 尝试了更多变体,但似乎没有一个能满足请求。

任何正确方向的帮助都会非常受欢迎。

提前致谢。

JSON API 链环

评论


答: 暂无答案