Как лучше всего разобрать javascript-анализ JSON-контента в ruby - PullRequest
3 голосов
/ 15 декабря 2011

У меня есть файл javascript, который я использую для своего приложения javascript, который я хотел бы прочитать и разобрать с помощью ruby.Содержимое этого файла не является строковым JSON, скорее это структура данных JSON, обработанная с помощью javascript.

IE, если мой код ruby ​​

require 'rubygems'
require 'json'
file = File.open("testing.js", 'r')
json = file.readlines.to_s
hash = JSON.parse(json)

, мой testing.js

{
  color:"blue"
}

, что не удастся, если я попытаюсь прочитать его в ...

JSON::ParserError: 751: unexpected token at '{ color:"blue" }'

, если сработает, если я изменю testing.js на строковое содержимое json

{
  "color":"blue"
}

, поэтомукак я могу заставить скрипт ruby ​​обрабатывать первый формат выше (без строкового форматирования), чтобы я мог оставить файл в его текущем формате?

... просто чтобы уточнить

Фактический реальный форматмоего файла

var setting = {
    color: "blue"
}

, и я просто извлекаю правую часть знака '=' для анализа, используя

require 'rubygems'
require 'json'
file = File.open("testing.js", 'r')
content = file.readlines.to_s
json = content.split("= ",2)[1]
hash = JSON.parse(json)

, но получаю ошибку, как описано выше, так же, как онапроблема со структурой JSON

1 Ответ

1 голос
/ 15 декабря 2011

Насколько мне известно, в json gem такая опция не предусмотрена.Проблема в том, что ваш файл может быть действительным JS, но он не действителен JSON , поэтому библиотеки JSON склонны отклонять его.У вас есть два простых варианта:

a) Исправьте вещь, чтобы она действовала в формате JSON.Вы можете сделать это либо вручную, либо, если ваши значения не включают двоеточия, используя регулярное выражение: json.gsub!(/([a-zA-Z]+):/, '"\1":')

b) Если вы используете Ruby 1.9, это не только допустимый JS, но и Ruby, так что выможет eval это.Обратите внимание на проблемы безопасности там.

...