【问题标题】:How to get a specific section of JSON into a string?如何将 JSON 的特定部分转换为字符串?
【发布时间】:2014-12-15 00:50:24
【问题描述】:

我是 JSON、node.js 和 javascript 的新手...我有一个小型 node.js 服务器,它从 openweathermap.org 获取一个 JSON 对象(下面命名为 weatherData),我试图让它只显示JSON 对象的特定部分(称为“temp”的部分)。到目前为止我用过:

var tempString = JSON.stringify(weatherData);

然后我使用字符串的搜索和子字符串方法来获取我的信息,但必须有更简单的方法对吗?如何只显示临时部分而不使用字符串方法?

编辑:当我把整个事情串起来时,我得到了这个

"{\"coord\":{\"lon\":-75.7,\"lat\":45.41},\"sys\":{\"type\":3,\"id\" :119304,\"消息\":0.0297,\"国家\":\"CA\",\"日出\":1413804390,\"日落\":1413842906},\"天气\":[{\" id\":802,\"main\":\"Clouds\",\"description\":\"scattered 云\",\"图标\":\"03n\"}],\"base\":\"cmc 站\",\"主要\":{\"温度\":273.05,\"湿度\":84,\"压力\":1012.188,\"temp_min\":273.05,\"temp_max\":273.05 },\"风\":{\"速度\":1.11,\"度数\":260.506},\"雨\":{\"3h\":0},\"云\":{\ "all\":44},\"dt\":1413780770,\"id\":6094817,\"name\":\"渥太华\",\"cod\":200}\n"

【问题讨论】:

  • 你为什么不做JSON.stringify(weatherData.temp);
  • 这完全是倒退。您拥有 javascript 对象形式的数据,您可以在其中直接访问所有部分。你不想把它串起来,然后把它变成一个寻找你想要的东西的复活节彩蛋。向我们展示 JSON 数据的样子,并准确指出您想要从数据中得到什么。
  • 我试过了,但它打印出“未定义”。我认为这可能是因为它实际上并不称为 temp 但如果我打印整个 JSON,它会显示如下内容: {\"temp\":273.05,\"humanity\":84,\"pressure\":1012.188,\ "temp_min\":273.05,\"temp_max\":273.05},\"wind\":{\"speed\":1.11,\"deg\":260.506},\"rain\":{\"3h \":0},\"clouds\":{\"all\":44},\"dt\":1413780770,\"id\":6094817,\"name\":\"Ottawa\", \"鳕鱼\":200}\n"
  • 请将 JSON 放入您的问题并正确格式化(使用编辑功能)。多行代码在 cmets 中可读性不强。
  • 看起来你可能正在双重字符串化。

标签: javascript json node.js


【解决方案1】:

JSON 已经是本机 Javascipt 对象,但 weatherData.tempundefined,因为这不是对象的属性之一。你想要的嵌套在main下:

weatherData.main.temp // 273.05

由于您提到您是 JS / Node 的新手,因此了解 console.log() 和 util.inspect() 可能会有所帮助。您可以使用这些工具将对象输出到控制台以检查其结构。

【讨论】:

  • 有道理。非常感谢!
  • 对于它的价值,JSON(Javascript 对象表示法)和 Javascript 中的实际对象之间的区别可能会让新手感到困惑。 JSON 是一种用于数据交换的文本格式,与 JS 中称为对象字面量的内容非常相似。它的主要区别在于它的语法略有限制。但大多数从 API 导入 JSON 数据的工具都会为您解析 JSON;你会得到一个普通的对象。你得到的不再是 JSON,它只是 曾经是 JSON,可能又是 JSON。
【解决方案2】:

已经是JSON格式了,不需要转成字符串。

您可以使用 weatherData.temp 直接访问“temp”部分

【讨论】:

    【解决方案3】:

    你试过了吗?

    var result = JSON.stringify(weatherData.temp);
    

    【讨论】:

    • 是的,我这样做了,但是当我这样做时,我变得不确定。当我在我的 OP 中对整个 JSON 进行字符串化时,我发布了结果。
    • 嗯.... JSON.stringify(weatherData.main.temp);会做。您必须以自上而下的顺序访问每个属性,例如下楼梯。例如:如果你想访问 a.b.c 中的 c,你必须写整个 a.b.c,而不是 a.c。
    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多