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

またはクイックフィックスの場合はバックスラッシュを3倍します。 –

+0

Jsonがどのように役立つのか理解できませんか? – zzheads

答えて

1

2つのこと:?。

A)それはあなたが出力フォーマットのようなJSONを作成するようになります次に:あなたのためにそれを行う既存のライブラリを使用してください。車輪を再発明する代わりに。

B)ここでは列挙型を使用しないことを検討してください。私はあなたが今のところ多くの場所でコントローラーの種類のようなスイッチを持っていると思います。または今はないかもしれませんが、すぐにそれらを持っているかもしれません。そしてそれは単純に:悪いオブジェクト指向設計!

代わりに行うべきこと:抽象クラスを作成し、各コントローラーにそのクラスの特定のサブクラスを入力させます。そして最後に、あなたのコードはちょうど

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

通常のStringのように引用符の前にバックスラッシュを表示したくありません。例:System.out.printf( "\" quotes \ "")のあるテキスト。出力: "引用符"を含むテキスト。 < - バックスラッシュがありません – zzheads

+1

あなたが見ているバックスラッシュは、ソースコードのバックスラッシュとは関係ありません。私が言ったように、バックスラッシュはJSON文字列でエスケープする必要があるので、そこにあります。それ以外の場合は、メッセージが 'roomName 'で終わらないことを知る方法はありません。メッセージを読み込んで表示するために使用しているものは、バックスラッシュを表示しないことを知っています。 – shmosel

関連する問題