【问题标题】:How can i add double quotes to look like json我怎样才能添加双引号看起来像json
【发布时间】:2016-04-08 17:27:03
【问题描述】:

我有以下字符串,但我想在其中添加双引号以看起来像 json

[
{
   LastName=abc, 
   FirstName=xyz, 
   EmailAddress=s@s.com, 
   IncludeInEmails=false
},
{ 
  LastName=mno, 
  FirstName=pqr, 
  EmailAddress=m@m.com, 
  IncludeInEmails=true
}
]

我想要下面的输出。

[
    {
       "LastName"="abc", 
       "FirstName"="xyz", 
       "EmailAddress"="s@s.com", 
       "IncludeInEmails"=false
    },
    { 
      "LastName"="mno", 
      "FirstName"="pqr", 
      "EmailAddress"="m@m.com", 
      "IncludeInEmails"=true
    }
    ]

我尝试了一些字符串正则表达式。但没有。谁能帮忙。

String text= jsonString.replaceAll("[^\\{\\},]+", "\"$0\"");
System.out.println(text);

谢谢

【问题讨论】:

  • 你有没有尝试过?向我们展示您的代码。
  • 添加了代码但输出不同 "["{"LastName=abc"," FirstName=xyz","EmailAddress=s@s.com"," IncludeInEmails=false"},{"LastName =mno","FirstName=pqr","EmailAddress=m@m.com","IncludeInEmails=true"}"]"
  • 我猜你不应该在 JSON 中引用布尔值或数字...所以仅仅一个简单的正则表达式是不够的...
  • 那么我应该怎么做。我想把它转换成json
  • 你是如何获得你的字符串的? toString() 打电话?

标签: java


【解决方案1】:

正则表达式的方式,和你尝试过的类似:

    String jsonString = "[ \n" + "{ \n" + "   LastName=abc,  \n" + "   FirstName=xyz,  \n"
            + "   EmailAddress=s@s.com,  \n" + "   IncludeInEmails=false \n" + "}, \n" + "{  \n"
            + "  LastName=mno,  \n" + "  FirstName=pqr,  \n" + "  EmailAddress=m@m.com,  \n" + "  Number=123,  \n"
            + "  IncludeInEmails=true \n" + "} \n" + "] \n";

    System.out.println("Before:\n" + jsonString);
    jsonString = jsonString.replaceAll("([\\w]+)[ ]*=", "\"$1\" ="); // to quote before = value
    jsonString = jsonString.replaceAll("=[ ]*([\\w@\\.]+)", "= \"$1\""); // to quote after = value, add special character as needed to the exclusion list in regex
    jsonString = jsonString.replaceAll("=[ ]*\"([\\d]+)\"", "= $1"); // to un-quote decimal value
    jsonString = jsonString.replaceAll("\"true\"", "true"); // to un-quote boolean
    jsonString = jsonString.replaceAll("\"false\"", "false"); // to un-quote boolean

    System.out.println("===============================");
    System.out.println("After:\n" + jsonString);

【讨论】:

  • 我正在尝试您的代码..看起来不错。让我用实际的字符串进行验证,然后将其标记为正确。
  • 救命稻草。谢谢!
【解决方案2】:

因为有很多极端情况,比如字符转义、布尔值、数字……一个简单的正则表达式是行不通的。

你可以用换行符分割输入字符串,然后分别处理每个键值对

for (String line : input.split("\\R")) {
    // split by "=" and handle key and value
}

但同样,您将不得不处理 char。转义、布尔值、...(顺便说一句,= 不是有效的 JSON 键值分隔符,只有 : 是)。

我建议使用GSON,因为它提供lenient 解析。使用Maven,您可以使用此依赖项将其添加到您的项目中:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.6.2</version>
</dependency>

然后您可以使用解析您的input 字符串

String output = new JsonParser()
    .parse(input)
    .toString();

【讨论】:

    【解决方案3】:

    只要使用这个库http://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1

    这是您的示例的代码:

        JSONArray json =  new JSONArray();
        JSONObject key1 = new JSONObject();
        key1.put("LastName", "abc");
        key1.put("FirstName", "xyz");
        key1.put("EmailAddress", "s@s.com");
        key1.put("IncludeInEmails", false);        
        JSONObject key2 = new JSONObject();
        key2.put("LastName", "mno");
        key2.put("FirstName", "pqr");
        key2.put("EmailAddress", "m@m.com");
        key2.put("IncludeInEmails", true);  
        json.add(key1);
        json.add(key2);
        System.out.println(json.toString());    
    

    【讨论】:

      【解决方案4】:

      使用下面的代码来得到你期望的输出,

      public class jsonTest {
      	
      	public static void main(String[] args){
      
      		String test="[{ LastName=abc, FirstName=xyz, EmailAddress=s@s.com,IncludeInEmails=false},{ LastName=mno, FirstName=pqr, EmailAddress=m@m.com, IncludeInEmails=true}]";
      	
      		String reg= test.replaceAll("[^\\{\\},]+", "\"$0\"");
      		
      		String value=reg.replace("\"[\"{", "[{").replace("=","\"=\"").replace(" ","").replace("}\"]\"","}]").replace("\"true\"", "true").replace("\"false\"", "false");
      		
      		System.out.println("value :: "+value);	
      	}
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 2016-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        相关资源
        最近更新 更多