2014-01-18 37 views
0

我对NODE.JS是相当新的,并且想把事物提升到一个新的水平。Node.js读取然后重新创建一个JSON文件

我有一个NODE.JS脚本从一个feed中读取数据,它被渲染为一个巨大的JSON文件。然后我有网页和移动应用程序使用这个文件来使用JQuery函数呈现内容。

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

我已经有服务器运行(express),我希望服务器侦听调用,然后从JSON文件中提取数据并将其重新渲染为较小的文件,然后使用res以.json

我有监听器,脚本,我只是缺少一块,即会在通过res.json

样品呈现在JSON文件和输出另一个动态JSON文件数据环(第一部分)饲料

{ 
    "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" 
    } 

在提取所有当前应用程序的信息,我有通过数据的群众去几次剧本,以及它的一些问题的旧手机。如果我只是能够提供比特大小的块并且尽力远离手机,它会大幅加快速度

+1

好的,您需要从我们这里得到什么? – t0mppa

+1

你是否能够用普通的解析器实际加载这个巨大的JSON文件?如果是这样,只需将想要的部分复制到常规对象,然后写入该对象。 Express会为你制作JSON。 – Brad

+0

取决于JSON,它可能不可能。如果你有一个大的平面对象或数组,你可以尝试填充“}”,“]”等几个排列,并尝试解析它在try/catch中。然而,字符串文字中的语法可能会混淆幼稚的尝试,所以如果你的数据是代码或更多的json,它可能会非常棘手。 – dandavis

回答

0

好的到达那里,所以我怀疑我现在可以通过转换现有的渲染代码从我的应用程序。

约我的例子中使用了以下提取时间戳和呈现为

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"); 
}); 

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

相关问题