2015-03-23 1 views
0

Я разбираю файл, чтобы сделать некоторую документацию.Как форматировать строку для исправления отступов в Javascript?

Строка Я возвращается в:

"([ { 
       href: "sass.html", 
       text: "Sass" 
      }, { 
       href: "components.html", 
       text: "Components" 
      }, { 
       href: "javascript.html", 
       text: "Javascript" 
      } ]) 
      " 

Я хотел бы приукрасить это, так что я может выводить его в предварительно теге. Таким образом, идеальный выход будет что-то вроде этого:

"(
    [ 
    { 
     href: "sass.html", 
     text: "Sass" 
    }, 
    { 
     href: "components.html", 
     text: "Components" 
    }, 
    { 
     href: "javascript.html", 
     text: "Javascript" 
    } 
    ] 
)" 

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

string.replace(/\s/g,'') 

Затем сделать кучу расколов разорвать каждую линию отдельно и добавьте интервал для отступов и присоединитесь к нему, но это кажется мне грязным. Есть ли лучший способ сделать это?

Любой совет, конечно, очень ценится.

Это отличается от: How can I beautify JSON programmatically?, потому что я имею дело со строкой на недействительных JSON.

+1

Где это форматирование происходит ? Требуется ли отступы? –

+0

@ gon250 нет нет. – TheHippo

+0

@ TheHippo: Видимо, тот, кто украл принятый ответ на этот вопрос, тоже подумал. Как правило, если кто-то плагиатит принятый ответ на существующий вопрос, есть очень высокая вероятность ответа на вопрос, это дубликат. Ясно, что это исключение из правила. – BoltClock

ответ

1

Трудность состоит в том, что формат у вас есть странно, это не является допустимым JSON, поэтому вы не можете использовать JSON.parse() непосредственно.

Это не является допустимым JSON по 2 причинам:

  1. Он окружен ( и ) по некоторым причинам.
  2. Ключи не двойные.

Так что вам в идеале нужно преобразовать строку в действительный JSON, а затем попробовать и проанализировать ее.

ярлык, если вы уверены, что вы доверяете эти данные, чтобы просто избавиться от скобок первой, а затем использовать столь поносили eval(), потому что это будет обойти тот факт, что ключи не котирующиеся ,

Вот один вкладыш для этого (при условии, строку в переменной с именем s):

JSON.stringify(eval(s.substring(s.indexOf('(') + 1, s.lastIndexOf(')'))), null, "\t") 

Или разделить его немного:

var pseudoJson = s.substring(s.indexOf('(') + 1, s.lastIndexOf(')')); 
JSON.stringify(eval(pseudoJson), null, "\t"); 
+0

Спасибо, что это почти идеально ... Единственная проблема, которую вы делаете: eval (s) вместо eval (pseudoJson). Я исправил это, и он отлично работает! Еще раз спасибо. Если вы исправите эту проблему, я приму это как правильный ответ. – busyPixels

+0

@busyPixels Хорошее место. Исправлена. – GregL

0

Вы можете просто проанализировать его, чтобы переформатировать его.

var jsonStr = '{"key":3}', // Your string here 
    jsonObj = JSON.parse(jsonStr); // Parse it 
    output = JSON.stringify(jsonObj, null, 4); // Stringify it indented by 4 spaces 
Смежные вопросы