我有旧的遗留代码,我不想重写,我正在使用gson和io.gsonfire与特殊的json映射到我的java类。我想将Datasnapshot转换为json字符串,以便我可以使用其他实现。我将无法使用Datasnapshot.getValue(SomeClass.class),因为我的变换器很特殊。
public class BlockTypeSelector {
public Gson createGson(){
GsonFireBuilder builder = new GsonFireBuilder()
.registerTypeSelector(AbstractPhrase.class, new TypeSelector<AbstractPhrase>() {
@Override
public Class<? extends AbstractPhrase> getClassForElement( JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("dotted");
if( element != null ){
return DottedFillPhrase.class;
}
return Phrase.class;
}
})
.registerTypeSelector(AbstractParagraph.class, new TypeSelector<AbstractParagraph>() {
@Override
public Class<? extends AbstractParagraph> getClassForElement( JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("cells");
if( element != null ){
return TableParagraph.class;
}
element = readElement.getAsJsonObject().get("padding");
if( element != null ){
return TableCell.class;
}
element = readElement.getAsJsonObject().get("fill");
if( element != null ){
return FillParagraph.class;
}
return Paragraph.class;
}
})
.registerTypeSelector(BaseElement.class, new TypeSelector<BaseElement>() {
@Override
public Class<? extends BaseElement> getClassForElement(JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("type");
if( element == null ){
throw new JsonSyntaxException( "You must have a type in block" );
}
String kind = element.getAsString();
if(kind.equals("LINE")){
return Line.class;
}else if(kind.equals("BLOCK")) {
return Block.class;
}else if(kind.equals("IMAGE")) {
return Image.class;
}else if(kind.equals("QR")) {
return QRCode.class;
}else if(kind.equals("BARCODE")) {
return Barcode.class;
} else {
return null; //returning null will trigger Gson's default behavior
}
}
});
return builder.createGson();
}
}
所以关于如何制作这样的东西的任何指示
{ key = 787878, value = {document={pages={0={blocks={0={position={3=60.1, 2=50, 1=28.95, 0=25.6}, useAscender=true, type=BLOCK, border={thickness=0.1}}}}}, name=22323}} }
到json String?我担心的是3:60和那些东西。我怎么知道它是一个数组而不是“3”:“60”json?
答案 0 :(得分:0)
看来你已经在使用Gson解析JSON了。您也可以使用Gson serialize JSON来使用自己的API挖掘DataSnapshot并使用它来填充一些JSON输出。
如果你这样做,我怀疑它与编写代码来导航DataSnapshot并直接转换 数据模型的工作量相同,而且运行速度比转换要快得多它是JSON,然后是你的模型。