【问题标题】:Node.js Read from then recreate a JSON fileNode.js 读取然后重新创建一个 JSON 文件
【发布时间】:2014-02-08 06:51:53
【问题描述】:

我对 NODE.JS 还很陌生,希望能更上一层楼。

我有一个 NODE.JS 脚本,它从提要中读取数据并将其呈现为一个巨大的 JSON 文件。然后,我有网页和移动应用程序,它们使用此文件使用 JQuery 函数呈现内容。

但是我想让这更有效,并且我希望节点服务器使用我编写的脚本从 JSON 文件中提取内容并将其分解为更小的 JSON 文件。这将阻止移动应用和网页进行任何渲染。

我已经让服务器运行(快速),我希望服务器监听调用,然后从 JSON 文件中提取数据并将其重新呈现为一个较小的文件,然后使用 res. json

我有监听器,脚本,我只是缺少将循环遍历 JSON 文件中的数据并输出另一个可由 res.json 呈现的动态 JSON 文件的部分

Feed(第一部分)的示例

{
  "RTPPDataMsgV1": {
    "owner": "Open Data",
    "timestamp": "1390097100000",
    "classification": "public",
    "Sender": {
      "application": "RTPP3",
      "organisation": "String"
    },
    "Publication": {
      "TopicID": "RTPP3/InternalPP"
    },
    "RTPPData": {
      "snapshotTStamp": "1390097100000",
      "SystemMsg": null,
      "RAGThresholds": [
        {
          "type": "TOC",
          "medium": "89",
          "good": "92"
        },
        {
          "type": "PPT",
          "medium": "85",
          "good": "91"
        }
      ],
      "PPT": {
        "rag": "W",
        "ragDisplayFlag": "Y",
        "text": "-1"
      },

此信息每 5 分钟下载一次,并且始终会更改。我希望服务器提取其中的一小部分并将其作为另一个小得多的 JSON 文件提供。例如,如果我只想要 RagTHRESHOLDS 部分,或者地狱,甚至只是时间戳。

所有这些都可以发生在内存中,不需要将操作系统写入文件,我只需要服务器接受请求(在本例中为 RAG 阈值),读取信息并通过 res.json 提供它('生成较小的 JSON 文件') 即

    {
      "type": "TOC",
      "medium": "89",
      "good": "92"
    },
    {
      "type": "PPT",
      "medium": "85",
      "good": "91"
    }

在提取当前应用程序的所有信息时,我的脚本会多次检查大量数据,这在一些旧手机上是个问题。如果我能够提供一点点大小的块并将精力从手机上移开,它将大大加快速度

【问题讨论】:

  • 好的,您需要我们提供什么?
  • 你能用普通的解析器实际加载这个巨大的 JSON 文件吗?如果是这样,只需将您想要的部分复制到常规对象,然后写入该对象。 Express 会为您生成 JSON。
  • 取决于 json,它甚至可能是不可能的。如果你有一个大的平面对象或数组,你可以尝试填充“}”、“]”等的几种排列,并尝试在 try/catch 中解析它。但是,字符串文字中的语法可能会混淆幼稚的尝试,因此如果您的数据是代码或更多 json,则可能会非常棘手。
  • 添加了提要的 sn-p 以及有关我正在寻找的内容的更多信息
  • 我猜我需要从 JSON 中读取数据,创建一个数组或字符串变量,然后使用 JSON.Stringify 转换回 JSON

标签: javascript jquery json node.js


【解决方案1】:

好的,所以我怀疑我现在可以通过转换我的应用程序中的现有渲染代码来完成它。

在关于我使用以下内容提取时间戳并呈现为的示例中

http://servername/ppm/timestamp.

我只需要创建一个包含所有 JSON 数据的字符串,然后将其发送到屏幕。我已经通过 JSON 检查器运行了输出并且它都是有效的。

var express = require('express'),
    http = require('http');

var ppm = require('./data/ppm.json'); //this gets the entire JSON file

var timestamp = '{"timestamp" : "' + ppm.RTPPMDataMsgV1.timestamp + '"}';

var app = express()
    .use(express.bodyParser())
    .use(express.static('public'));

app.get('/ppm/timestamp', function (req, res) {
    res.send(timestamp);
});

app.get('/*', function (req, res) {
    res.json(404, {status: 'not found'});
});

http.createServer(app).listen(3000, function () {
    console.log("Server ready at http://localhost:3000");
});

这只是最简单的例子。更复杂的输出将被过滤和大量列表,但我已经构建了这些循环,只需要调整它们。然而,现在所有这些数据提取都由服务器完成,不再需要由现在只需要呈现输出的手机/网站完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2021-01-11
    • 2013-07-12
    相关资源
    最近更新 更多