用于在符号的行中将JSON文本分割的Java例程

问题描述 投票:0回答:1

假设我的应用必须以这种形式创建JSON文本文件

{
 "key1"
:
"value1"
,
"key2"
:
"value2"
,
"arrayKey"
:
[
{
"keyA"
:
"valueA"
,
"keyB"
:
"valueB"
,
"keyC"
:
[
0
,
1
,
2
]
}
]
}

来自

JSONObject.toString()

这是我的Android Java应用程序中的一长行文本

{"key1":"value1","key2":"value2","arrayKey":[{"keyA":"valueA","keyB":"valueB","keyC":[0,1,2]}]}

已经证明正则表达式方法无效。

有很多陷阱。

所以我决定创建自己的解析器来完成工作

public static String JSONTextToCRSeparatedJSONText(String JSONText)
{
    String result="";
    String symbolList="{}[]:,";
    char ch;
    char previousChar=0;

    int charNum=JSONText.length();
    boolean inRegion=false;
    boolean CRInsertedBefore=false;
    char startRegionChar=0;
    for (int i=0;i<charNum;i++)
    {

    ch=JSONText.charAt(i);
    previousChar=ch; //it will be useful next iteration


    if (!inRegion) 
    {
        if (((ch=='\"')||(ch=='\''))&&(previousChar!='\\'))
        {
            inRegion=true;
            startRegionChar=ch;
        }
    } else
    {
        if ((ch==startRegionChar)&&(previousChar!='\\'))
        {
            inRegion=false;

        }
    }

    if ((!inRegion)&& (symbolList.indexOf(ch)>-1)&&(!CRInsertedBefore))
    {
        result=result+"\n";
    } 
    result=result+ch;
    CRInsertedBefore=false; 
    if ((!inRegion)&& (symbolList.indexOf(ch)>-1))
    {
        result=result+"\n";
        CRInsertedBefore=true; //it will be useful next iteration

    }
}
    return result;
}

似乎正在运行。

我只想知道

如果它检查用于插入CR(\ n)控制字符的符号是否在JSON文本中所有符号都可以,

并且如果有一些我看不到的陷阱。

java json parsing carriage-return linefeed
1个回答
0
投票

我认为您自己要做的工作太多。如今,有两个主要的已知库可用于JSON。一个是Jackson-JSON(也称为“快速XML”-图),另一个是GSON-基于Jackson-JSON的Google库,但也支持传递二进制对象。我个人更喜欢Jackson-JSON,但这是个人喜好问题。对于GSON库,请查看here。对于杰克逊,请看here。对于杰克逊的Maven工件,请看here。如果您选择与Jackson一起工作,则您需要的主要课程是ObjectMapper。从研究方法readValue()writeValue()开始。在网络上寻找无休止的示例,以了解如何使用它。这应该给您一个好的开始。无论如何,这两个库都允许您生成格式正确的JSON。对于Gson:字符串内容=新的String(Files.readAllBytes(resource.toPath()));

Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(content);
String prettyJsonString = gson.toJson(je);
System.out.println(prettyJsonString);

return prettyJsonString;

对于Jackson-JSON:

  ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    String prettyJsonString = mapper.writeValueAsString(content);

    return prettyJsonString;

通过少得多的工作就可以完成工作,并且可以进行更好的测试。另外,如果您要以Html格式显示相同的格式,请参见此问题的答案:Pretty print for JSON in JAVA works fine for the console, but in browser it does not work

© www.soinside.com 2019 - 2024. All rights reserved.