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和Business of Business是两个json对象。有没有办法验证json对象的语法。
在市场json对象“ MKTID002 ”键和业务线“ LOB3 ”键中,语法错误且Market对象未正确关闭。
有没有找到使用java找到错误的方法
答案 0 :(得分:2)
验证某些JSON的基本语法的明显方法是简单地尝试使用众多JSON解析器库之一加载/读取/解析它。 (如果解析/读取/加载成功,您可以丢弃结果数据结构)。 json.org列出许多语言的许多JSON库......包括Java。
如果构建和丢弃数据结构是一个问题,那么一些库提供与加载分开的JSON验证;例如http://www.stringtree.org/stringtree-json.html
如果只想在 ad hoc 的基础上进行此验证(即不是某些大型应用程序的一部分),请尝试jsonlint.com
服务。
答案 1 :(得分:1)
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)
答案 2 :(得分:0)
对java使用任何JSON库(org.json.JSONObject),您将获得API中内置的解析和验证等所有功能。
这些库将任何String作为参数,如果它无法将字符串解析为JSONObject,则抛出异常。
JSONObject jsob = new JSONObject(StringRepresentationOfJson);