【问题标题】:Losing new line symbols (\r\n)丢失换行符 (\r\n)
【发布时间】:2014-01-07 10:13:44
【问题描述】:

我有一个宏,它从 JIRA 中获取整个问题信息(作为 JSON 对象)并在 Confluence 中打印出来。但是在 Confluence 中,新的行丢失了,格式也一团糟。

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

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

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

这是它在 JSON 中的样子:

报告随后通过 ftp 发送到 Aviva 风险管理 团队。\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();
    }

【问题讨论】:

标签: java json formatting jira confluence


【解决方案1】:

您不必担心这一点。 JSON 完全能够代表任何 UTF-8 字符。一旦你收到 JSON 字符串,你肯定在你的代码中做了一些事情,它摆脱了\r\n 字符。您应该能够通过编写逻辑将\r\n 转换为新行,例如添加&lt;br&gt; html 标记。请在帖子中添加您如何从 JSON 中获取数据以将其打印到您的页面中

这一行从你的字符串中删除所有 `\r\n'

 result = ((String) result).replaceAll("\\W", " ");

这就是字符串文字没有任何 \r\n 字符的原因。请删除该行并进行测试。请注意,\W 表示“任何非单词字符”。即不包括这些 [a-zA-Z0-9_] 字符的字符。希望这会有所帮助

【讨论】:

  • 这种情况仅适用于报告人、受让人和客户经理字段,它们是单行电子邮件地址,我将它们格式化为看起来像名字,这不是破坏它的原因。我从中获得该文本的字段是“公司描述”,它不输入​​我格式化字符串并删除非字母数字字符(“\W”)的情况。
【解决方案2】:

"\r\n" 是 Windows 和 Unix 的遗留物。使用 Confluence,您需要 HTML 标记来代替换行符,因为 html 将其他换行符视为单个空格。

所以一个简单的result = ((String) result).replace("\r\n", "&lt;br&gt;"); 就成功了。

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2015-04-24
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多