自己的Firebase解串器

时间:2017-01-11 20:49:33

标签: java firebase firebase-realtime-database

我有旧的遗留代码,我不想重写,我正在使用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?

1 个答案:

答案 0 :(得分:0)

看来你已经在使用Gson解析JSON了。您也可以使用Gson serialize JSON来使用自己的API挖掘DataSnapshot并使用它来填充一些JSON输出。

如果你这样做,我怀疑它与编写代码来导航DataSnapshot并直接转换 数据模型的工作量相同,而且运行速度比转换要快得多它是JSON,然后是你的模型。