我的服务(用 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"}
}
]
我需要从 Ruby 客户端检索值 metricDate 和 metricValue。我不确定如何做到这一点。在这方面的任何帮助都会很大。
最佳答案
如果要解析这种数据格式,首先要知道它是什么数据格式。它似乎不是任何众所周知的数据格式,也不是我所知道的任何格式。显然它不是 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)>
关于java - 从 ruby 检索 Java 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637410/