将数据写入json文件

时间:2014-05-15 16:41:13

标签: java arrays json

我需要将一些信息写入JSON文件。

我写了以下函数:

public String toJSON() {
    StringBuffer sb = new StringBuffer();

    sb.append("\"" + MyConstants.VEHICLE_LABEL + "\":");
    sb.append("{");
    sb.append("\"" + MyConstants.CAPACITY1_LABEL + "\": " + String.valueOf(this.getCapacity(0)) +  ",");
    sb.append("\"" + MyConstants.CAPACITY2_LABEL + "\": " + String.valueOf(this.getCapacity(1)) +  ",");
    sb.append("\"" + MyConstants.CAPACITY3_LABEL + "\": " + String.valueOf(this.getCapacity(2)));   
    sb.append("}");

    return sb.toString();
}

但是,我想让这个功能更灵活。特别是,如果容量单位的数量不固定(1,2或3),我应该如何更改此代码?

我认为应该有一个FOOR循环,但我不确定如何正确实现它。

2 个答案:

答案 0 :(得分:1)

只有当this.getCapacity(i)不为空时才能进行追加。

您可以使用for循环

执行此类操作
for(int i=0; i < max; i++) {
    if(!StringUtils.isEmpty(String.valueOf(this.getCapacity(i)))){
        sb.append("\"" + String.format(MyConstants.CAPACITY_LABEL, i) + "\": " + String.valueOf(this.getCapacity(i)) +  ",");
    }
}

其中MyConstants.CAPACITY_LABEL类似于&#34;容量%d_label&#34;

但是,正如azurefrog所说,我会使用json解析器来做到这一点。

答案 1 :(得分:1)

您可以尝试遵循常用构建器模式的以下类:

public class JsonVehicleBuilder {

    private StringBuilder builder;

    /**
     *  Starts off the builder with the main label
     */
    public JsonVehicleBuilder(String mainLabel) {
        builder = new StringBuilder();
        builder.append("\"").append(mainLabel).append("\":");
        builder.append("{");
    }

    public JsonVehicleBuilder appendSimpleValue(String label, String value) {
        builder.append("\"").append(label).append("\":").append(value).append(",");
        return this;
    }

    /**
     * Appends the closing bracket and outputs the final JSON
     */
    public String build() {
        builder.deleteCharAt(builder.lastIndexOf(",")); //remove last comma
        builder.append("}");
        return builder.toString();
    }
}

然后在你的主要方法中你会打电话:

   JsonVehicleBuilder jsonVehicleBuilder = new JsonVehicleBuilder(MyConstants.VEHICLE_LABEL);
    jsonVehicleBuilder.appendSimpleValue(MyConstants.CAPACITY1_LABEL,String.valueOf(this.getCapacity(0)))
            .appendSimpleValue(MyConstants.CAPACITY2_LABEL,String.valueOf(this.getCapacity(1)))
            .appendSimpleValue(MyConstants.CAPACITY3_LABEL,String.valueOf(this.getCapacity(2)));

    String json = jsonVehicleBuilder.build();

然后,只要您愿意,就可以继续链接appendSimpleValue方法。