2015-08-09 2 views
1

Так что я пытаюсь разобрать небольшой API, который возвращает несколько недействительных JSON. Я пытался сделать что-то вроде этого:Можно ли даже разобрать это как JSON в node.js?

var request = require('request'), 
     url = 'urlhere'; 
    request({ 
     url: url 
    }, function(error, response, body) { 
     if (!error && response.statusCode === 200) { 
      var jsonData = JSON.parse(body), 
       jsonArray = []; // For jsonArray.push later 
      for (var i = 0; i < jsonData.length; i++) 
       console.log(jsonData[i].name); 
      jsonData.length = 0; // Clear array. 
     } 
    }); 

но служба я пытаюсь читать есть что-то похожее на это в качестве обратного утверждения:

{ 
    people: [ 
     { 
      name: "test" 
     }, 
     { 
      name: "test2" 
     }, 
     { 
      name: "test3" 
     }, 
     { 
      name: "test4" 
     } 
    ] 
} 

Я пытался чтобы заставить это работать, но когда я это делаю, просто возвращает [object Object]. Когда я пошел глубже, я узнал, что это даже не действительный JSON, или какие веб-сайты и клиенты считают его недействительным JSON. Есть ли способ обойти это в node.js?

+0

Это не JSON, а обычная декларация объекта. Похоже, что API ожидает, что вы будете использовать 'eval()' (вы, вероятно, не должны). – spenibus

ответ

1

Если вы не в состоянии исправить неверную JSON, я думаю, что проще всего было бы попробовать и отремонтировать его, добавив недостающие кавычки для ключей, используя регулярное выражение:

поиск: /(['"])?([a-zA-Z0-9_]+)(['"])?:/g

заменить : "$&":

+0

Подожди, я в замешательстве. Как мне это сделать? Возможно, я немного устал. –

+0

Для JS вы можете сделать это: 'var data = '{people: [{name:" test "}]}'; var json = data.replace (/ (['"])? ([A-zA-Z0-9 _] +) (['"])?:/G, '"$ 2":'); ' I предположим, что вы можете использовать это для узла также – Jervelund

+0

Это сработало, на самом деле. Я странно удивлен. Я не знаю, почему это сработало, но так оно и было. –

Смежные вопросы