2016-08-21 9 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

или тройной обратной косой чертой для быстрого исправления. –

+0

Я не понимаю, как Джон может помочь? – 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 («Некоторый текст с \ quotes \" "); Результат: некоторый текст с «кавычками». <- Нет обратных косых черт – zzheads

+1

Обратные косые черты, которые вы видите, не имеют ничего общего с обратными косыми чертами в исходном коде. Они там, потому что обратная косая черта должна быть экранирована в строке JSON, как я уже сказал. В противном случае нет способа узнать, что сообщение не заканчивается на 'roomName ''. Независимо от того, что вы используете для чтения и отображения сообщения, вы знаете, что не показывать обратную косую черту, так что проблем действительно нет. – shmosel

 Смежные вопросы

  • Нет связанных вопросов^_^