【问题标题】:JSON.stringify(array) from jsp to servlet (loop using javax.json-api1.0. jar or javax.json-1.0.jar only)从 jsp 到 servlet 的 JSON.stringify(array)(仅使用 javax.json-api1.0.jar 或 javax.json-1.0.jar 循环)
【发布时间】:2014-09-26 11:34:28
【问题描述】:

HTML:

<table>
    <tr>
        <td>
            <input type="hidden" value="flag1" />
        </td>
        <td>
            <input type="text" value="orange" />
        </td>
        <td>
            <input type="text" value="1.00" />
        </td>
        <td>
            <input type="text" value="5" />
        </td>
    </tr>
    <tr>
        <td>
            <input type="hidden" value="flag2" />
        </td>
        <td>
            <input type="text" value="apple" />
        </td>
        <td>
            <input type="text" value="2.00" />
        </td>
        <td>
            <input type="text" value="5" />
        </td>
    </tr>
</table>

JS:

var array = $.map($('table tr'), function (val, i) {
    var obj = {}, inputs = $(val).find('td input:not(:hidden)');
    obj[inputs.filter(':first').val()] = $.map(inputs.not(':first'), function (val, i) {
        return val.value;
    });
    return obj;
});

alert(JSON.stringify(array));
$(document).on("click","#save",function(){
    $.post("servlet.html","data="+JSON.stringify(array)+"",function(response){
    });
});

Java servlet 包含以下内容:

 String data = request.getParameter("data");

数据看起来像这样:

[{"flag1":["orange","1.00","5"]},{"flag2":["apple","2.00","5"]}]//this is get from table row data using stringify

我只想使用javax.json-api1.0.jarjavax.json-1.0.jar 进入第一个循环:

在第一个循环中:

 flag1
 Orange
 1.00
 5

在第二个循环中:

flag2
Apple
2.00
5

任何帮助都是最好的。

【问题讨论】:

标签: java json servlets jar


【解决方案1】:

您可以只使用 json-api,但必须确定输入数据的结构。 如果没有,gson 或 jackson2 更容易使用。

如果你想使用 json-api,你可以这样做:

首先在您的 servlet 中声明一个 JsonFactoryReader 属性,因为您将为每个请求创建一个读取器。

JsonReaderFactory readerFactory = Json.createReaderFactory(null);

然后在您的servicedoXXX 方法中执行:

String data = request.getParameter("data");
// create a reader for json data
JsonReader jr = readerFactory.createReader(new StringReader(data));
// tol level must be an array, and we count the iteration for eventual error messages
JsonArray ja = jr.readArray();
int iteration = 0;
for (JsonValue jv: ja) {
    // sub elements must be dicts
    if (jv.getValueType() != ValueType.OBJECT) {
        throw new FormatException(iteration, jv);
    }
    for (Entry<String, JsonValue> e: ((JsonObject) jv).entrySet()) {
        // the key
        String key = e.getKey();
        if (e.getValue().getValueType() != ValueType.ARRAY) {
            throw new FormatException(iteration, e.getValue());
        }
        // the values, first is a string
        JsonArray array = (JsonArray) e.getValue();
        for (int i=0; i<array.size(); i++) {
            System.out.println(array.get(0).getValueType());
        }
        String name = array.getString(0);
        // next a float and an int
        float fval;
        int ival;
        try {
            fval = Float.valueOf(array.getString(1));
            ival = Integer.valueOf(array.getString(2));
        }
        catch (NumberFormatException ex) {
            throw new FormatException(iteration, array);
        }
        // Do your stuff with those values ...
        // for instance Data data = new Data(key, name, fval, ival) ...
        iteration++;
    }
}

我建议你一个异常类来处理格式错误(至少你知道它为什么坏了......):

class FormatException extends ServletException {
    FormatException(int i, JsonValue jv) {
        super("Iteration " + String.valueOf(i) + " : " + jv.toString());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2018-04-29
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多