2

私はnet.sf.jsonライブラリを使用してjson To javaおり、その逆の変換も行っています

私は次の文字列を持っています:

String jsonStr = "{\"name\" : \"abc\",\"address\"  : \"def\"}";    // line 1

以下のコードを使用して、上記の文字列が有効なjson配列であることを確認しようとしました:

JSONArray arr = JSONArray.fromObject(jsonStr);      // line 2
System.out.println(arr.isArray());       // line 3

しかし、2行目で次の例外が発生します

Exception in thread "main" net.sf.json.JSONException: A JSONArray text must start with '[' at character 1 of {"name" : "abc","address"  : "def"}
    at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:527)
    at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1146)
    at net.sf.json.JSONArray._fromString(JSONArray.java:1226)
    at net.sf.json.JSONArray.fromObject(JSONArray.java:151)
    at net.sf.json.JSONArray.fromObject(JSONArray.java:129)
    at com.example.WsClient.main(WsClient.java:2) // 

現在JSONArray、有効な json 文字列として検証するための静的メソッドがクラスにないため、json 配列を作成してから検証する必要があります。しかし、配列の作成中に例外が発生しています。次に、このメソッドをどのように使用できますか?

上記の文字列が であることを確認するにはどうすればよいvalid json Arrayですか?

編集:現在、文字列はオブジェクトですが、引数として文字列を使用してメソッドを作成し、jsonArray に変換するとします。文字列が有効なjson配列であることを確認するにはどうすればよいですか?

4

2 に答える 2

2

ドキュメントからnet.sf.json.JSONArray.fromObject():

例外: JSONException- オブジェクトを適切な に変換できない場合 JSONArray

したがって、例外を介して文字列を既に検証しており、これが JSON の有効な配列文字列ではないことがわかっています。この JSON 文字列をメソッド引数として取得すると、(メソッドによって) 例外を再スローするか、(を返すことによってnull) ローカルで処理できます。

isArray()JSONメソッドは、によって実装されるインターフェースの一部ですJSONArray

boolean isArray()trueこのオブジェクトが である場合は を 返しJSONArrayfalseそうでない場合は を返します。

実際に有効な解析済み JSON 配列があり、オブジェクトがJSONArray.

私が言おうとしているのは、この文字列が有効かどうかを特別にチェックする必要はないということです。次の 2 つの解決策があります。

public XXX parseYourString(String json) throws net.sf.json.JSONException {
    JSONArray arr = JSONArray.fromObject(json);
    // do something with arr and return custom result
}

また:

public XXX parseYourString(String json) {
    XXX xxx = new XXX();
    try {
          JSONArray arr = JSONArray.fromObject(json);

          // do something with arr

    } catch (JSONException ex) {
        return null;
    }
    return xxx;
}
于 2013-08-14T10:22:34.360 に答える
0

次のように確認できます。

public boolean isValid(String jsonString)
{
    boolean valid = false;
    try {
        JSONArray.fromObject(jsonString)
        valid = true;
    }
    catch(JSONException ex) { 
        valid = false;
    }
    return valid;
}
于 2013-08-14T10:24:32.110 に答える