Nodejs如何处理从webservice接口上面获得的数据

Nodejs如何处理从webservice接口上面获得的数据

用soap访问webservice的天气接口,网站上面说是获得的数据是一维数组,但是console.log(result)是获以下数据,typeof(result)是object,但是输出result[1]却是undefined的, 1.这个是数组吗?这个跟数字索引的数组有什么区别?它的索引是什么? 2.能将这个数组转换成数字索引数组吗?或者提取里面的数据组成个新数组? { getWeatherResult: { string: [ ‘直辖市 北京’, ‘北京’, ‘792’, ‘2014/12/10 23:03:30’, ’-7℃/3℃’, ‘北风5-6级’, ‘1.gif’, ‘1.gif’, ‘12月11日 晴转多云’, ’-4℃/3℃’, ‘北风3-4级转4-5级’, ] } }


4 回复

Node.js 如何处理从 Web Service 接口获取的数据

背景

假设你正在使用 soap 库来调用一个 Web Service 接口,该接口返回的数据结构与预期不符。你发现虽然 typeof(result) 显示为 object,但直接通过索引访问元素时会遇到问题。

问题分析

根据描述,返回的数据结构如下:

{
  getWeatherResult: {
    string: [
      '直辖市 北京',
      '北京',
      '792',
      '2014/12/10 23:03:30',
      '-7℃/3℃',
      '北风5-6级',
      '1.gif',
      '1.gif',
      '12月11日 晴转多云',
      '-4℃/3℃',
      '北风3-4级转4-5级'
    ]
  }
}

从结构上看,getWeatherResult 对象中有一个名为 string 的属性,它是一个数组。因此,这不是一个普通的 JavaScript 数组,而是一个嵌套在一个对象中的数组。

解决方案

为了更好地处理这些数据,你可以先提取 string 数组,然后根据需要进行操作。

示例代码
const soap = require('soap');
const url = 'http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl';
const args = {};

soap.createClient(url, (err, client) => {
  if (err) throw err;

  client.getWeather(args, (err, result) => {
    if (err) throw err;

    // 提取 string 数组
    const weatherData = result.getWeatherResult.string;

    // 打印原始数据
    console.log(weatherData);

    // 将数据转换为新的数组(如果需要)
    const newData = weatherData.map((item, index) => ({
      index: index,
      value: item
    }));

    // 打印新数组
    console.log(newData);
  });
});

解释

  1. 提取数据:首先,我们从 result.getWeatherResult.string 中提取 string 数组。
  2. 处理数据:使用 map() 方法遍历数组,并将其转换为一个新的数组,其中每个元素包含索引和对应的值。
  3. 输出结果:打印原始数据和新数组,以验证数据是否正确提取和转换。

结论

通过上述方法,你可以轻松地从 Web Service 接口中获取数据并进行处理。即使数据结构不是标准的一维数组,也可以通过适当的方法提取和转换数据。


这是一个对象,请JSON.parse

索引KEY是getWeatherResult

result['getWeatherResult']['string'][1]

根据你的描述,result对象中的数据结构比较复杂,并不是一维数组。我们可以逐步解析它,以便获取所需的信息。

问题解答

  1. 这不是一个简单的数组result.getWeatherResult.string 是一个数组,但 result 本身是一个对象,包含多个属性。其中 getWeatherResult 是一个对象,包含了 string 这个数组。result[1] 是 undefined 的原因是因为 result 是一个对象而不是数组,所以不能通过索引直接访问。

  2. 可以将数据提取到一个新的数组中。假设你想提取 getWeatherResult.string 中的所有元素,你可以直接使用这个数组。如果需要进一步处理或重新组织这些数据,可以通过遍历数组来完成。

示例代码

const soap = require('soap');
const url = 'http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL';

// 客户端调用方法
soap.createClient(url, function(err, client) {
    // 调用Web服务方法
    client.getWeather('北京', function(err, result) {
        if (err) {
            console.error("Error:", err);
            return;
        }
        
        // 提取数据
        const weatherData = result.getWeatherResult.string;

        // 输出原始数据
        console.log(weatherData);

        // 如果你想创建一个新数组并进行处理
        const processedData = weatherData.map((item, index) => ({
            index: index,
            value: item
        }));

        // 输出处理后的数据
        console.log(processedData);
    });
});

解释

  1. 导入soap模块:首先需要引入soap模块。
  2. 创建客户端:通过给定的WSDL URL创建SOAP客户端。
  3. 调用Web服务方法:调用Web服务中的方法(如getWeather)。
  4. 提取数据:从结果中提取需要的数据(weatherData)。
  5. 处理数据:可以对提取的数据进行进一步处理,例如映射成新的数组。

这样就可以方便地访问和处理从WebService接口获取的数据了。

回到顶部