2014-01-18 79 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"); 
}); 

這只是最簡單的例子。更復雜的輸出將被過濾和大量的列表,但我已經構建了這些循環,只需要調整它們。然而,現在所有這些數據提取都是由服務器完成的,而不再需要通過電話/網站完成,現在只需要渲染輸出

相關問題