丢失新的线符号(\ r \ n)

时间:2014-01-07 10:13:45

标签: java json formatting jira confluence

我有一个宏从JIRA(作为JSON对象)获取整个问题信息并将其打印在Confluence中。但是在Confluence中,新的线条丢失了,格式也变得很糟糕。

这是Jira中的文字(以及它的外观):

  

报告随后通过ftp发送给Aviva风险管理团队。

     

Aviva风险团队使用每日报告提取一些数字   以及关于投资组合风险表现的报告。

这是它在JSON中的外观:

  

报告随后通过ftp发送至Aviva Risk Management   团队。\ r \ n \ r \ nAviva风险团队使用每日报告来提取一些   关于投资组合风险表现的数字和报告。

这是后来印刷的内容:

  

报告随后通过ftp发送给Aviva风险管理团队。   Aviva风险团队使用每日报告来提取一些数字   以及关于投资组合风险表现的报告。

基本上,我从中得到的是,\n\r符号丢失或者不能在Confluence中翻译它们的方式。我该如何解决这个问题?

编辑:@Octopus这是代码。

public class FieldinfoMacro implements Macro {

    @Override
    @SuppressWarnings("unchecked")
    // This macro gets the issue's field values from the page's context so you don't have to
    // make new requests to Jira for each field seperately
    public String execute(Map<String, String> par, String s, ConversionContext conversionContext)
            throws MacroExecutionException {

        // parameters
        String add = (String) par.get("getfield").toLowerCase();
        HashMap<String, String> fieldMap = (HashMap<String, String>) conversionContext.getProperty("fieldMap");
        JSONObject issue = (JSONObject) conversionContext.getProperty("issueJson");
        Object output = null;
        Object result = null;
        StringBuilder temp = new StringBuilder();

       /* if (add.equals("reporter") || add.equals("assignee") || add.equals("account manager")) {
            try {
                output = issue.getJSONObject("fields").get(fieldMap.get(add));
                result = ((JSONObject) output).get("emailAddress");
                result = ((String) result).replaceAll("@.*", "");
                result = ((String) result).replaceAll("\\W", " ");
            } catch (JSONException je) {
                je.printStackTrace();
            }
        } else { */
        // get the requested field value from the issue
        // there's a handler for the different types of returned data
        // i.e. JSONObject, JSONArray, String
            try {
                output = issue.getJSONObject("fields").get(fieldMap.get(add));
                // String handler
                if (output instanceof String) {
                    result = output;
                    // JSONArray handler (covered different cases)
                } else if (output instanceof JSONArray) {
                    for (int i = 0; i < ((JSONArray) output).length(); i++) {
                        if (((JSONArray) output).get(i) instanceof JSONObject) {
                            result = ((JSONArray) output).getJSONObject(i).getString("value");
                        } else {
                            if (((JSONArray) output).length() < 2) {
                                temp.append(((JSONArray) output).getString(i));
                            } else if (i < ((JSONArray) output).length() - 1) {
                                temp.append(((JSONArray) output).getString(i) + ", ");
                            } else temp.append(((JSONArray) output).getString(i));
                            result = temp;
                        }
                    }
                    // JSONObject handler
                } else if (output instanceof JSONObject) {
                    result = ((JSONObject) output).getString("value");
                }
            } catch (JSONException je) {
                je.printStackTrace();
         }

        return result.toString();
    }

2 个答案:

答案 0 :(得分:2)

你不应该担心这个。 JSON完全能够代表任何UTF-8个字符。收到JSON字符串后,您肯定会在代码中执行某些操作,从而获得\r\n个字符的rids。您应该能够通过编写逻辑将\r\n转换为新行,例如添加<br> html标记。请在帖子中添加如何从JSON获取数据以在页面中打印

此行从String

中删除所有`\ r \ n'
 result = ((String) result).replaceAll("\\W", " ");

这就是String字面值没有任何\r\n个字符的原因。请删除该行并进行测试。请注意\W表示“任何非单词字符”。即排除这些[a-zA-Z0-9_]个字符的字符。希望这有帮助

答案 1 :(得分:0)

“\ r \ n”是来自Windows&amp; Unix的。使用Confluence,您希望HTML标记用于换行符,因为html将其他换行符视为单个空格。

所以一个简单的result = ((String) result).replace("\r\n", "<br>");就可以了。