2015-12-25 3 views
2

Как выполнить итерацию по строке JSON и заменить каждый ObjectId на Unix Epoch time для дальнейшей обработки?как заменить ObjectId в JavaScript с помощью Epoch Time

Что я знаю: Вы получаете первые 8 символов из ObjectId с:

subStrObjectId = objectId.substring(0, 8); 

5668d142a54cc4960b55ea19 -> 5668D142

и конвертировать их из шестнадцатеричной в значение Int (время эпохальное в миллисекундах):

subStrObjectIdInDec = parseInt(subStrObjectId, 16); 

5668D142 (шест) -> 1 449709890 (декабрь)

моя Json строка:

myJsonString = [ 
    [ 
     {"_id":"5668d142a54cc4960b55ea19","cid":10851045,"temp":25.4}, 
     {"_id":"5668d14ea54cc4960b55ea1a","cid":10850909,"temp":24.9} 
    ], 
    [ 
     {"_id":"5668d14fa54cc4960b55ea1b","cid":10851045,"hum":37.9}, 
     {"_id":"5668d3108c8cda92074b7ec9","cid":10850909,"hum":39.6} 
    ], 
    [ 
     {"_id":"5668d3198c8cda92074b7ecb","cid":10851045,"lux":34}, 
     {"_id":"5668d31e8c8cda92074b7ecc","cid":10850909,"lux":68} 
    ] 
]; 
+0

, что ваш вопрос? что вы делаете, кажется, хорошо. –

+0

Как я могу повторить эту строку json example «myJsonString» и заменить все объекты с правильной эпохой? как написать такую ​​функцию? – teadrinker

+0

Я отправил ответ, если это ответит на ваш вопрос, подумайте о том, чтобы отметить его как ответ для будущих посетителей. –

ответ

3

Если вы пишете, что вы знаете, как функция:

function convert(id) { 
    return parseInt(id.substring(0, 8), 16); 
} 

Вы можете легко итерацию над вашими объектами и запуска функции на объекты.

Я предпочитаю функциональный стиль JavaScript:

var data = myJsonString.map(function (array) { 
    return array.map(function (item) { 
    item.time = convert(item._id); 
    return item; 
    }) 
}) 

console.log(data); 

Но вы можете пойти итеративный с петлями, а также:

for (var i=0;i<myJsonString.length;i++) { 
    for (var j=0;j<myJsonString[i].length;j++) { 
    myJsonString[i][j].time = convert(myJsonString[i][j]._id); 
    } 
} 
console.log(myJsonString); 
1

Вы можете использовать getTimestamp() вернуть временную метку часть ObjectId() как дата.

myJsonString.map(
    function(element) { 
     return element.map(function(doc) { 
      doc.timestamp = ObjectId(doc._id).getTimestamp(); 
      doc._id = ObjectId(doc._id); // Only if you want to convert your _id string to valid Objectid 
      return doc; 
     }) 
    } 
); 

Что дает:

[  
    [ 
      { 
        "_id" : ObjectId("5668d14fa54cc4960b55ea1b"), 
        "cid" : 10851045, 
        "hum" : 37.9, 
        "timestamp" : ISODate("2015-12-10T01:11:43Z") 
      }, 
      { 
        "_id" : ObjectId("5668d3108c8cda92074b7ec9"), 
        "cid" : 10850909, 
        "hum" : 39.6, 
        "timestamp" : ISODate("2015-12-10T01:19:12Z") 
      } 
    ], 
    [ 
      { 
        "_id" : ObjectId("5668d3198c8cda92074b7ecb"), 
        "cid" : 10851045, 
        "lux" : 34, 
        "timestamp" : ISODate("2015-12-10T01:19:21Z") 
      }, 
      { 
        "_id" : ObjectId("5668d31e8c8cda92074b7ecc"), 
        "cid" : 10850909, 
        "lux" : 68, 
        "timestamp" : ISODate("2015-12-10T01:19:26Z") 
      } 
    ] 
] 
Смежные вопросы