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",

在这个例子中市场和业务线是两个 json 对象。有什么方法可以验证 json 对象的语法。

在市场 json 对象“ MKTID002 ”键和业务线“ LOB3 ”键中,语法错误,市场对象未正确关闭。

有什么方法可以使用java找到错误

4

3 回答 3

2

验证某些 JSON 的基本语法的明显方法是简单地尝试使用许多 JSON 解析器库之一加载/读取/解析它。(如果解析/读取/加载成功,您可以丢弃生成的数据结构)。 json.org列出了多种语言的许多 JSON 库……包括 Java。

如果构建和丢弃数据结构是一个问题,那么一些库提供与加载分开的 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) 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 回答