1
Line_Of_Business = {
        LOB1           : "LOBAppType=sadfsd",  
        LOB2           : "LOBAppType=asdf",
        LOB3           : "LOBAppType=asdf}
        LOB4           : "LOBAppType=sdf",
};

Market = {
        MKTID001       :"MarketName=US||Descr=USA",
        MKTID002       "MarketName=JP||Descr=Japan""
            LOB3           : "LOBAppType=asdf",
        LOB4           : "LOBAppType=sdf",

この例では、Market と Line of Business が 2 つの json オブジェクトです。json オブジェクトの構文を検証する方法はありますか。

Market json オブジェクト " MKTID002 " キーと基幹業務 " LOB3 " キーの構文が正しくなく、Market オブジェクトが正しく閉じられていません。

Javaを使用してエラーを見つける方法はありますか

4

3 に答える 3

2

いくつかのJSONの基本的な構文を検証する明白な方法は、多くのJSONパーサーライブラリの1つを使用してそれをロード/読み取り/解析することです。(そして、解析/読み取り/ロードが成功した場合、結果のデータ構造を破棄できます)。 json.orgJavaを含む多くの言語のJSONライブラリの数を一覧表示します。

データ構造の構築と破棄が懸念される場合、一部のライブラリはロードとは別にJSON検証を提供します。例: http: //www.stringtree.org/stringtree-json.html

また、この検証をアドホックベースで(つまり、大規模なアプリケーションの一部としてではなく)実行したい場合は、jsonlint.comサービスを試してください。

于 2012-12-04T10:50:35.120 に答える
1

Gsonを使用した構文チェックの例( lombok を使用) :

package com.stackoverflow.so13701022;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import com.google.gson.annotations.SerializedName;

import lombok.Data;

public class CheckJson {
    @Data
    private static class LineOfBusiness {
        @SerializedName("LOB1")
        private String lob1;

        @SerializedName("LOB2")
        private String lob2;

        @SerializedName("LOB3")
        private String lob3;

        @SerializedName("LOB4")
        private String lob4;
    }

    @Data
    private static class Market {
        @SerializedName("MKTID001")
        private String mktid001;

        @SerializedName("MKTID002")
        private String mktid002;

        @SerializedName("LOB3")
        private String lob3;

        @SerializedName("LOB4")
        private String lob4;
    }

    private static final String ONE = "{" + 
    "        LOB1           : \"LOBAppType=sadfsd\"," + 
    "        LOB2           : \"LOBAppType=asdf\"," + 
    "        LOB3           : \"LOBAppType=asdf}" + 
    "        LOB4           : \"LOBAppType=sdf\"," + 
    "}";

    // I corrected this one on purpose
    private static final String TWO = "{" + 
    "        MKTID001       :\"MarketName=US||Descr=USA\"," + 
    "        MKTID002       :\"MarketName=JP||Descr=Japan\"," + 
    "        LOB3           : \"LOBAppType=asdf\"," +
    "        LOB4           : \"LOBAppType=sdf\"" + 
    "}";

    public static void main(String[] args)
    {
        final Gson gson = new GsonBuilder().create();
        System.out.println(tryParse(gson, ONE, LineOfBusiness.class));
        System.out.println(tryParse(gson, TWO, Market.class));
    }

    private static <T> T tryParse(Gson gson, String what, Class<T> clazz)
    {
        try {
            return gson.fromJson(what, clazz);
        } catch (final JsonSyntaxException e) {
            System.err.println(e);
        }
        return null;
    }
}

出力 (Err = stderr、Out = stdout):

(Err) com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 159
(Out) null
(Out) CheckJson.Market(mktid001=MarketName=US||Descr=USA, mktid002=MarketName=JP||Descr=Japan, lob3=LOBAppType=asdf, lob4=LOBAppType=sdf)
于 2012-12-04T11:06:15.230 に答える
0

Java 用の任意の JSON ライブラリ (org.json.JSONObject) を使用すると、API に組み込まれている解析や検証などのすべての機能を取得できます。

これらのライブラリは任意の文字列を引数として取り、文字列を JSONObject に解析できない場合は例外をスローします。

 JSONObject jsob = new JSONObject(StringRepresentationOfJson);
于 2012-12-04T11:00:26.697 に答える