1

私はJavaが初めてです。私を助けてください。以下の JSON 応答に問題があります。

{"GetResult":"{  \"IsDate\": [    {      \"Code\": \"200\"    },    {      \"Message\": \"Fetched successfully\"    },    {      \"ID\": \"722c8190c\",      \"Name\": \"Recruitment\",      \"Path\": \"URL\",      \"Date\": \"14 May, 2013\"    },     ]}"}

不正な JSON オブジェクトです。だから、私はマッチングパターンを使用して のデータを取得しName、以下のように取得して成功しています:PathDateNamePath

 Matcher matcherName = Pattern.compile("\\\\\"Name\\\\\":\\s\\\\\"[^,}\\]]+\\\\\"").matcher(Name);

Matcher matcherPath = Pattern.compile("\\\\\"Path\\\\\":\\s\\\\\"^[^,}\\]]+\\\\\"").matcher(Path);

Pathしたがって、上記の行から、およびを取得できNameます。なので、入手方法Dateも教えてください。のフォーマットDate is 14 May, 2013。私を助けてください。

4

2 に答える 2

2

有効なjsonです。

ここでjsonlintを確認してください

このように解析します

{
    "GetResult": "{  \"IsDate\": [    {      \"Code\": \"200\"    },    {      \"Message\": \"Fetched successfully\"    },    {      \"ID\": \"722c8190c\",      \"Name\": \"Recruitment\",      \"Path\": \"URL\",      \"Date\": \"14 May, 2013\"    },     ]}"
}

JSONObject parent=new JSONObject(jsonString);
JSONObject obj=parent.getJSONObject("GetResult");
JSONArray array=obj.getJSONArray("IsDate");

String jsondatestring=array.getString(2);
JSONObject datejson=new JSONObject(jsondatestring);
String date=datejson.getString("Date");

そして、これらの文字をエスケープ解除する方法を知りたい場合は、これを試してください

Commons langライブラリとStringEscapeUtilsクラスを使用します。

単に使用する

String newString=StringEscapeUtils.unescapeJava(yourString);
于 2013-05-14T13:12:06.670 に答える
1

マッチャーはあなたの質問とほぼ同じです:

Matcher matcherDate = Pattern.compile("\\\\\"Date\\\\\":\\s\\\\\"([^\\\\]*)\\\\\"").matcher(brokenJson);
while (matcherDate.find()) {
    System.out.println(matcherDate.group(1));
}

次に、次を使用して日付を解析できますSimpleDateFormat

更新します。ファイルからbrokenJsonを読み取って解析する完全なコード:

    String brokenJson = Files.toString(new File("1.dat"), Charset.defaultCharset());
    Matcher matcherDate = Pattern.compile("\\\\\"Date\\\\\":\\s\\\\\"([^\\\\]*)\\\\\"").matcher(brokenJson);
    while (matcherDate.find()) {
        System.out.println(matcherDate.group(1));
    }
于 2013-05-14T13:12:04.277 に答える