Разбор js массивов в ruby - PullRequest
       6

Разбор js массивов в ruby

3 голосов
/ 25 сентября 2010

у меня есть js-файл, который содержит объекты Array и данные, присваиваемые

var A_1_val = new Array(7);
var B_1_txt = new Array(7);         

A_1_val[0] = '111';
B_1_txt[0] = 'utf8_content';

A_1_val[1] = '222';
B_1_txt[1] = 'bar';

и т.д ..

нужно получить эти массивы в ruby.

найдено http://github.com/jbarnette/johnson,, но он не может правильно вернуть объект массива

еще один способ - оценить js в ruby, аналогично

  1. получить имя массива

  2. вырезать массивы инициализировать из JS

  3. ruby ​​eval

    A_1_val [0] = '111'

    B_1_txt [0] = 'utf8_content'

оба пути - отстой. может быть, вы можете предложить какие-либо идеи

спасибо

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Вы можете использовать строку JSON для маршалинга данных между javascript и ruby:

#!/usr/bin/env ruby

require 'johnson'
require 'open-uri'
require 'yajl'

# Grab the source to the Javascript JSON implementation
json_js = open('http://www.json.org/json2.js').read
# Strip that silly alert at the top of the file
json_js.gsub!(/^(alert.*)$/, '/* \1 */')

# This is some Javascript you wanted to get something from
some_js = <<-EOF
var A_1_val = new Array(7);
var B_1_txt = new Array(7);         

A_1_val[0] = '111';
B_1_txt[0] = 'Ähtäri';

A_1_val[1] = 'Barsebäck slott';
B_1_txt[1] = '新宿区';
EOF

result = Johnson.evaluate(<<-EOF)
/* Include the JSON source code */
#{json_js}

/* Include the source code you wanted to get something from */
#{some_js}

/* Turn the things you wanted out into a string */
JSON.stringify([ A_1_val, B_1_txt ])
EOF

# Get the result back in ruby
ruby_result = Yajl::Parser.parse(result)

# Do something with it
puts ruby_result.inspect

, что дает вывод:

[["111", "Barseb\303\244ck slott", nil, nil, nil, nil, nil], ["\303\204ht\303\244ri", "\346\226\260\345\256\277\345\214\272", nil, nil, nil, nil, nil]]
1 голос
/ 25 сентября 2010

Самый простой способ передавать массивы (и множество других сложных структур данных) на разные языки - это JSON.Используйте это для кодирования массива с использованием JavaScript: http://www.json.org/js.html.

. Это закодирует массив в формате, который может использовать любой язык, поддерживающий JSON.или это: http://github.com/brianmario/yajl-ruby для декодирования с помощью Ruby:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...