Android でのヒープ メモリ不足の問題を防ぐために、Jackson 内でツリー モデルからストリーミング API に変換しています。「タグ」値配列全体を JSON 文字列として読み取ることにより、処理をさらに高速化したいと考えています。この例では、レポート ID ごとに 3 つのタグすべてとその値を含む JSON 文字列が必要です。
私のデータの簡略版は次のとおりです。
"TagRpts":[
{ "ID":46,
"Tags":[
{ "Name":"Tag1",
"Values":[
{"t":"Instance 1","v":"407"},
{"t":"Instance 2","v":"360"},
{"t":"Instance 3","v":"309"}]},
{ "Name":"Tag2",
"Values":[
{"t":"Instance 1","v":"926"},
{"t":"Instance 2","v":"168"},
{"t":"Instance 3","v":"366"}]},
{ "Name":"Tag3",
"Values":[
{"t":"Instance 1","v":"744"},
{"t":"Instance 2","v":"668"},
{"t":"Instance 3","v":"62"}]}]},
{ "ID":47,
"Tags":[
{ "Name":"machine 1",
"Values":[
{"t":"Instance 1","v":"613"},
{"t":"Instance 2","v":"882"},
"t":"Instance 3","v":"602"}]},
{ "Name":"machine 2",
"Values":[
{"t":"Instance 1","v":"38"},
{"t":"Instance 2","v":"38"},
{"t":"Instance 3","v":"329"}]},
{ "Name":"machine 3",
"Values":[
{"t":"Instance 1","v":"276"},
{"t":"Instance 2","v":"721"},
{"t":"Instance 3","v":"660"}]}]}
]
私は現在、このコードでそれを読んでいます(説明のために簡略化されています-コンマを処理する領域をstringbuilderに削除するなど):
if ("TagRpts".equals(fieldname)) { // TagRpts
jParser.nextToken(); // [ or null
if (jParser.getText() != "null") {
while (jParser.nextToken() != JsonToken.END_ARRAY) { // Tag report Array
while (jParser.nextToken() != JsonToken.END_OBJECT) {
fieldname = jParser.getCurrentName();
if ("ID".equals(fieldname)) {
jParser.nextToken();
aTagReport.ID = jParser.getText();}
if ("Tags".equals(fieldname)) {
StringBuilder sb = new StringBuilder();
sb.append("[");
while(jParser.nextToken() != JsonToken.END_ARRAY) {
fieldname = jParser.getCurrentName();
if ("Name".equals(fieldname)) {
jParser.nextToken();
sb.append("{\"Name\":\"" + Utility.encodeJSON(jParser.getText()) + "\"");}
if ("Values".equals(fieldname)) {
sb.append("\"Values\":[");
while(jParser.nextToken() != JsonToken.END_ARRAY) {
fieldname = jParser.getCurrentName();
if ("t".equals(fieldname)) {
jParser.nextToken();
sb.append("{\"t\":\"" + Utility.encodeJSON(jParser.getText()) + "\"");}
if ("v".equals(fieldname)) {
jParser.nextToken();
sb.append(",\"v\":\"" + Utility.encodeJSON(jParser.getText()) + "\"}");}
}
sb.append("]}");
}
}
sb.append("]");
aTagReport.Tags = sb.toString();
}
}
aTagReport.SaveTagReport();
aTagReport = new TagReport();
}
}
}