2016-08-21 105 views
0

试图输出一些文字与引号(“)这样的:添加引号字符串的Java

public static String expectedFormatData(ItemRequested currentController) { 
    String result = ""; 

    switch (currentController) { 
     case ROOM: result = "{\"roomName\" : roomName, \"squareFootage\" : squareFootage"; break; 
     case EQUIPMENT: result = "{\"equipmentName\" : roomName}"; break; 
     case CONTROL: result = "{\"controlName\" : roomName}"; break; 
     case VALUE: result = "{value}"; break; 
     default: break; 
    } 
    return result; 
} 

输出:

"message": "Can't make that request. Expected data format: {\"roomName\" : roomName, \"squareFootage\" : squareFootage (com.zzheads.HomeAutomation.controller.RoomController.addRoom(RoomController.java:40))", 

正如你所看到的字符 ”\“ 字符串存在如何。插入字符串引号而没有

+1

不这样做。您应该使用JSON序列化程序。 – SLaks

+0

或三倍于quickfix的反斜杠。 –

+0

我不明白Json如何提供帮助? – zzheads

回答

1

两件事情:?

A),它看起来像要像输出格式创建JSON然后:使用现有的库,为您做到这一点;而不是重新发明轮子。 B)考虑不要在这里使用枚举。我猜你现在在很多地方都有类似的控制器类型的开关。或者可能不是现在,但你可能很快就会拥有它们。那很简单:糟糕的OO设计!

你应该怎么做:创建一个抽象类,并使每个控制器类型成为特定的子类。最后,你的代码只是做类似

String controllerAsString = whatEverInstanceOfController.formatData(); 

或沿着这些线的东西。

+0

我看到一些其他的方式,我可以做我需要的东西,但如何插入静态字符串与引号到JSON?无论如何,我必须这样做,无论如何,我会看到相同的结果 – zzheads

+1

如上所述;我有很大的麻烦理解你想做什么;以及为什么会这样。所以也许有一种方法可以让你的例子变得更简单;以便我们明白你的观点。 – GhostCat

0

这与Json确实是一样的东西,调试后的代码和: 在发送之前作为Json响应,响应包含字符串而引号之前没有丑陋的反斜杠。当我使用Postman反斜杠检查输出时。

private class ApiErrorSerializer implements JsonSerializer<ApiError> { 
    @Override 
    public JsonElement serialize(ApiError src, Type typeOfSrc, JsonSerializationContext context) { 
     Gson gson = new Gson(); 
     JsonObject result = new JsonObject(); 
     Date date = new Date(); 
     result.addProperty("timestamp", String.valueOf(new Timestamp(date.getTime()))); 
     result.addProperty("status", String.valueOf(src.getStatus())); 
     if (src.getStatus() == 404) { 
      result.addProperty("error", "Not Found"); 
     } else { 
      result.addProperty("error", "Bad Request"); 
     } 
     result.addProperty("exception", typeOfSrc.getTypeName()); 

     JsonPrimitive message = new JsonPrimitive(src.getMessage()); 
     //result.addProperty("message", src.getMessage()); 
     result.add("message", message); 

     result.addProperty("path", src.getPath()); 
     return result; 
    } 
} 

调试:当字符串转换为JsonPrimitive时,看起来像在引号之前添加反斜杠。 输出:

{ 
    "timestamp": "2016-08-21 19:45:12.157", 
    "status": "400", 
    "error": "Bad Request", 
    "exception": "com.zzheads.HomeAutomation.exceptions.ApiErrorBadRequest", 
    "message": "Can't make that request. Expected data format: {\"roomName\" : roomName, \"squareFootage\" : squareFootage} (com.zzheads.HomeAutomation.controller.RoomController.addRoom(RoomController.java:40))", 
    "path": "/room" 
} 
+1

这是完全正确的。 JSON字符串中的引号应该是反斜杠转义的。你还想要什么? – shmosel

+0

我不想在引号之前看到反斜杠,就像通常的字符串一样。例如:System.out.printf(“一些带有\”引号\“”的文本);输出:一些带有“引号”的文字。 < - 没有反斜杠 – zzheads

+1

您看到的反斜杠与源代码中的反斜杠无关。正如我所说,因为反斜杠需要在JSON字符串中转义,所以它们在那里。否则,无法知道消息是不是以'roomName'结束的。无论你用什么来阅读和显示消息,都不会显示反斜杠,所以确实没有问题。 – shmosel