java 如何简单快速处理 json 中的数据
关键词导读:Json Java解析Json 计算Json
JSONstr.json的runners字段是子文档,子文档有3个字段:horseId、ownerColours、trainer,其中trainer含有下级字段trainerId。需要根据文档序号查询对应子文档的horseId、ownerColours、trainerId字段。部分源数据如下:
[ { "race": { "raceId":"1.33.1141109.2", "meetingId":"1.33.1141109" }, ... "numberOfRunners": 2, "runners": [ { "horseId":"1.00387464", "trainer": { "trainerId":"1.00034060" }, "ownerColours":"Maroon,pink sleeves,dark blue cap." }, { "horseId":"1.00373620", "trainer": { "trainerId":"1.00010997" }, "ownerColours":"Black,emerald green cross of lorraine,striped sleeves." } ] }, ... ] |
期望Json结构化后的效果:
Java只提供了解析Json的基础类库,但API接口多而繁琐,如果想进行深入的计算,仍然需要复杂硬编码。大概要写成这样:
... JSONObject jsonObject = JSONObject.fromObject(s); JSONArray result = jsonObject.getJSONArray("runners"); for (int i = 0; i < result.size(); i++) { JSONArray index = result.getJSONObject(i).getJSONArray("index"); ... } ... |
Json解析,用集算器SPL会简单很多,它把Json类库做了二次封装,且有丰富强大的集合运算能力,所以很容易应对。比如上面问题,取出第 1 个 runners 字段 (子文档),仅需3行:
|
A |
1 |
=json(file("/workspace/JSONstr.json").read()) |
2 |
=A1(1).runners |
3 |
=A2.new(horseId,trainer.trainerId:trainerId,ownerColours) |
Json 解析出来一般都是为了计算,所以 SPL 还能更方便地计算,比如:按 horseId 分组统计每组中 ownerColours 出现的次数;只需在此基础上增加 1 行:=A3.groups(horseId;~.array().count():times)。其实还有很多情况用Java解析Json不太方便,甚至计算入库等需求,但用集算器SPL却很简单,感兴趣可以参考:轻松应对多层JSON数据计算与入库。
集算器还很容易嵌入到Java应用程序中,Java如何调用SPL脚本有使用和获得它的方法。
关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。