4

次のような不正な形式の JSON 文字列を受け取ったアプリがあります。

{'username' : 'xirby'}

'一重引用符を二重引用符に置き換える必要があります"

これらのルールで(私は思う):

  • 一重引用符は、{1 つ以上のスペースを含むの後に来ます
  • 1 つ以上のスペースの前に来て、:
  • の後に、:もう 1 つのスペースが続きます
  • 1 つ以上のスペースの前に来て、}

したがって、この文字列{'username' : 'xirby'}または

{  'username' : 'xirby'  }

次のように変換されます。

{"username" : "xirby"}

アップデート:

また、不正な形式の JSON 文字列の可能性があります。

{  'message' : 'there's not much to say'  }

この例では、メッセージ値内の一重引用符を置き換えないでください。

4

7 に答える 7

1
String test = "{'username' : 'xirby'}";
String replaced = test.replaceAll("'", "\"");
于 2013-06-09T11:49:41.233 に答える
1

あなたの質問のタグがJAVAであることについて、私はJAVAで答えました。

最初にライブラリをインポートします。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

それで:

Pattern p = Pattern.compile("((?<=(\\{|\\[|\\,|:))\\s*')|('\\s*(?=(\\}|(\\])|(\\,|:))))");
String s = "{   'firstName'   :   'Malus'     ,    'lastName'   :   ' Ms'Malus'     , marks:[   '  A+  ', 'B+']}";
String replace = "\"";
String o;

Matcher m = p.matcher(s);
o = m.replaceAll(replace);
System.out.println(o);

出力:

{"firstName":"Malus","lastName":" Ms'Malus", marks:["  A+  ","B+"]}
于 2018-03-14T15:29:26.883 に答える
0

これらの条件をすべて正確に満たしたい場合は、次のことを試してください。

'{(\s)?\'(.*)\'(\s)?:(\s)?\'(.*)\'(\s)?}'

あなたが正規表現として。(\s)? 1 つまたはゼロの空白文字に一致します。

于 2013-06-09T11:59:03.063 に答える
-1

REGEX の代わりに JSON パーサーを使用することをお勧めします。

String strJson = "{  'username' : 'xirby'  }";
strJson = new JSONObject(strJson).toString();
System.out.println(strJson);
于 2013-06-09T12:18:02.297 に答える