提取 json 中的有效字段
【问题】
A valid form of a JSON document begins as an Array element. How do you access any element using the JsonDataSource “jsonpath” to query it? I have tried using the standard $[0] for the top level fields and as “$” for creating my subdataset but neither works… when I place the array under a standard element it works fin,e but that is not the format of our JSON.
My JSON loks a bit like this:
[ { “race”: { “raceId”: “1.33.1141109.2”, “startDate”: “2014-11-09T13:15:00.000Z”, “raceClassification”: { “classification”: “Novices’” }, “raceType”: { “key”: “H” }, “raceClass”: 4, “course”: { “courseId”: “1.33” }, “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.” } ] }, { “race”: { “raceId”: “1.33.1141109.3”, “startDate”: “2014-11-09T13:45:00.000Z”, “raceClassification”: { “classification”: “Handicap” }, “raceType”: { “key”: “C” }, “raceClass”: 4, “course”: { “courseId”: “1.33” }, “meetingId”: “1.33.1141109” }, “numberOfRunners”: 2, “runners”: [ { “horseId”: “1.00297339”, “trainer”: { “trainerId”: “1.00000577” }, “ownerColours”: “Maroon and light blue (quartered), maroon sleeves.” }, { “horseId”: “1.00333030”, “trainer”: { “trainerId”: “1.00000065”, }, “ownerColours”: “Emerald green, yellow hoops, white cap.” } ] } ]
输入参数(比如 1 或 2),从 json 文件中取出数组中指定成员的三个字段:horseId, trainerId,ownerColours。比如输入 1,结果应该是:
1.003874641.00034060Maroon, pink sleeves, dark blue cap.
1.003736201.00010997Black, emerald green cross of lorraine, striped sleeves.
【回答】
使用 SPL 处理 json 数据后可以快速获取所需要的信息,代码如下:
A | |
---|---|
1 | =file(“d:\\data.json”).read() |
2 | =json(A1) |
3 | =A2(which).runners |
4 | =A3.new(horseId,trainer.trainerId:trainerId,ownerColours) |
运行结果:
A1:读取 json 串
A2:解析 json 形成序表
A3:指定数组成员,which 是参数名本例中可以取 1 或者 2,获得节点二维表
A4:提取所需要的三个字段,生成新序表,其中 trainerId 要从下级取。