Получение списка Java из ruby - PullRequest
2 голосов
/ 12 апреля 2011

Мой сервис (написанный на Java) возвращает мне вывод в формате:

 "serviceMetricList": 
  [
    {"MetricDataList": 
      {"metricDataList": 
        [
          {"metricDate": "2011-04-05T14:50:00.000Z", 
           "metricValue": "427448.0"}, 
          {"metricDate": "2011-04-12T14:30:00.000Z", 
           "metricValue": "430089.0"}
        ]
      }, 
     "urlSerialNo": "1"}
     }
  ]

Мне нужно получить значения metricDate и metricValue из моего клиента Ruby.Я не уверен, как это можно сделать.Любая помощь в этом отношении будет отличной.

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

Если вы хотите проанализировать этот формат данных, вам сначала нужно знать, что это за формат данных. Похоже, что это не какой-либо широко известный формат данных, и это не тот формат, который я знаю. Очевидно, что это не JSON и не YAML, а определенно не XML.

Итак, вам, вероятно, придется написать свой собственный парсер. Или препроцессор, который преобразует данные в более известный формат, для которого парсер уже существует.

Например, если вы преобразуете пример в YAML, он будет выглядеть примерно так:

"serviceMetricList": 
  [
    {"MetricDataList": 
      {"metricDataList": 
        [
          {"metricDate": "2011-04-05T14:50:00.000Z", 
           "metricValue": "427448.0"}, 
          {"metricDate": "2011-04-12T14:30:00.000Z", 
           "metricValue": "430089.0"}
        ]
      }, 
     "urlSerialNo": "1"
    }
  ]

И вы можете разобрать это так:

require 'yaml'
h = YAML.load(your_java_data)

Date.parse(h['serviceMetricList'][0]['MetricDataList']['metricDataList'][0]['metricDate'])
# => #<Date: 2011-04-05 (4911313/2,0,2299161)>

Float(h['serviceMetricList'][0]['MetricDataList']['metricDataList'][0]['metricValue'])
# => 427448.0

# or maybe, if you don't like to lose precision:
require 'bigdecimal'

BigDecimal(h['serviceMetricList'][0]['MetricDataList']['metricDataList'][0]['metricValue'])
# => #<BigDecimal:eb8240,'0.427448E6',8(12)>
1 голос
/ 12 апреля 2011

Похоже, что ваш java-сервис плюет в JSON (выглядит как this , нет?)

Вы можете попробовать это проанализировать с помощью JSON Parser в ruby ​​:

require 'rubygems'; require 'json';
a = JSON.parse( "{"+ str + "}" )

Кстати, ваш образец поврежден,} закрывается дважды после urlSerialNo .Кроме того, это JSON!

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