Как вывести строку в Java содержащую спец. символы?

использую Talend ESB для выгрузки прайса из программы (БД Firebird) на сайт. в БД сайта (MySQL) в одном поле должна быть строка типа
'{\n "metadata.title": "",\n "metadata.description": "",\n "metadata.keywords": "",\n "metadata.robots": "",\n "metadata.author": "",\n "config.enable_comments": 1,\n "config.primary_category": 205,\n "jbzoo.no_index": 0\n}'
' , куда мне еще нужно вставить свои значения (row1.DESCR) из Firebird,
допустим,
"metadata.description": "row1.DESCR"
из запроса.
в Java не смыслю, и синтаксис не знаю, Talend возвращает ошибки "Синтаксическая ошибка в лексеме" и "Синтаксическая ошибка; вставьте ";" для завершения Statement"/
как вывести всё в одну строку, начинающуюся с один.кавычки и содержащую кавычки и спецсимволы,
  • Вопрос задан
  • 22894 просмотра
Решения вопроса 1
FanKiLL
@FanKiLL
То есть по сути вам нужен json. Зачем вы его создаёте руками и мучаетесь с экранированием.
Когда можно сделать java class с нужными вам полями, инициализировать его нужными параметрами и из него получить json строку, которую и сможете отправить куда надо.
Воспользуетесь библиотекой gson от гугла - https://code.google.com/p/google-gson/

Например:
Сделаем класс:
public class TalentESBData {

    @SerializedName("metadata.title")
    private String metadataTitle;
    @SerializedName("metadata.description")
    private String metadataDescription;
    @SerializedName("metadata.keywords")
    private String metadataKeywords;
    @SerializedName("metadata.robots")
    private String metadataRobots;
    @SerializedName("metadata.author")
    private String metadataAuthor;
    @SerializedName("config.enable_comments")
    private int configEnableComments;
    @SerializedName("config.primary_category")
    private int configPrimaryCategory;
    @SerializedName("jbzoo.no_index")
    private int jbzooNoIndex;

    // Геттеры и сеттеры опустим их любая ide сгенерирует...

    public String toJson(){
        Gson gson = new Gson(); //библиотека для генерации json
        String jsonResponse = gson.toJson(this);
        return jsonResponse;
    }
}


И теперь в как этим воспользоватся.

public class TalentMain {

    public static void main(String[] args) {

        TalentESBData talentData = new TalentESBData(); //инициализируем класс
        talentData.setMetadataDescription(""); //заполняем поля какие надо
        talentData.setMetadataAuthor("");
        talentData.setMetadataKeywords("");
        talentData.setMetadataRobots("");
        talentData.setMetadataTitle("");
        talentData.setConfigEnableComments(1);
        talentData.setConfigPrimaryCategory(205);
        talentData.setJbzooNoIndex(0);


        System.out.println(talentData.toJson()); // Получаем json и выводим в консоль, в вашем случа
        // вместо консоли можете отправлять эти данные или что там нужно сними делать.
    }
}


На выходе имеем такой json,
{
  "metadata.title": "",
  "metadata.description": "",
  "metadata.keywords": "",
  "metadata.robots": "",
  "metadata.author": "",
  "config.enable_comments": 1,
  "config.primary_category": 205,
  "jbzoo.no_index": 0
}


Теперь удобно добавлять новые поля, просто добавляете новые переменные в класс и генерируете новый json.

Если что спрашивайте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
anyd3v
@anyd3v
Судя по тексту ошибки у вас проблема с запросом. Текст "вставьте ";" для завершения Statemen" уж сильно напоминает ошибки, которые выдает база данных при не правильно составленном запросе.
Ответ написан
voznik
@voznik Автор вопроса
почитал пару часов про экранирование спецсимволов в Java. привел строку к виду:
"'\\{\"metadata.title\": \"\",\n	\"metadata.description\": \" '"+row1.DESCR+"'\",\n	\"metadata.keywords\": \"\",\n	\"metadata.robots\": \"\",\n	\"metadata.author\": \"\",\n	\"config.enable_comments\": 1,\n	\"config.primary_category\": 205,\n	\"jbzoo.no_index\": 0\n\\}'"

результат:
'\{"metadata.title": "",
	"metadata.description": " 'Терапевт – лікар'",
	"metadata.keywords": "",
	"metadata.robots": "",
	"metadata.author": "",
	"config.enable_comments": 1,
	"config.primary_category": 205,
	"jbzoo.no_index": 0
\}'


но мне нужна в начале строки просто фигурная скобка, а не \{. если я ее экранирую только одним слешем - тогда ошибка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы