2014-01-07 1 views
1

JIRA에서 전체 이슈 정보를 JSON 객체로 사용하여 Confluence에서 인쇄하는 매크로가 있습니다. 그러나 Confluence에서는 새로운 라인이 사라지고 포맷팅은 지옥으로 빠져 든다.새 라인 기호 삭제 ( r n)

이 락스의 텍스트 (그리고 그것은 어떻게 보이는지) :

보고서는 이후 비바 리스크 관리 팀에 FTP를 통해 전송됩니다.

Aviva 위험 팀은 일일 보고서를 사용하여 숫자 중 일부를 추출하고 포트폴리오의 위험 성과에 대한 보고서를 제공합니다.

이는 JSON의 모습입니다 :

보고서는 이후 비바 리스크 관리 팀에 FTP를 통해 전송되는 \ 연구 \ n \ r에 \의 nAviva 위험 팀이 추출하기 위해 일일 보고서를 사용합니다. 일부는 이고 포트폴리오의 위험 성과에 대한 보고서는 해당 수치입니다.

는 그리고이 나중에 인쇄됩니다 것입니다 :

보고서는 이후 비바 리스크 관리 팀에 FTP를 통해 전송됩니다. 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(); 
    } 
+0

[JSON은 다중 행을 저장할 수 없습니다.] (http://gun.io/blog/multi-line-strings-in-json/) JSON으로 인코딩 된 양식은 나를 놀라게하지 않습니다."무엇이 인쇄되는지"는 인쇄 프로세서가 줄 바꿈을 제대로 처리 할 수 ​​없음으로 인해 발생하는 것 같습니다. – fvu

답변

0

"\ r \ n"은 Windows & 유닉스에서 유래 한 것입니다. html은 다른 줄 바꿈을 하나의 공백으로 처리하기 때문에 Confluence를 사용하여 줄 바꿈을위한 HTML 태그를 대신 사용합니다.

간단한 result = ((String) result).replace("\r\n", "<br>");이 트릭을 만들었습니다.

2

이 점에 대해 걱정할 필요가 없습니다. JSON은 완벽하게 어떤 UTF-8 문자를 나타낼 수 있습니다. JSON 문자열을 받으면 코드에서 무언가를하고 있는데, 이는 \r\n 문자의 갯수가됩니다. 논리를 작성하여 \r\n<br> html 태그 추가와 같은 새 줄로 변환 할 수 있어야합니다. 당신이

이 줄은 제거 페이지에 인쇄하는 JSON에서 데이터를 얼마나 게시물에 추가하십시오 모든 '\ 연구 \ n'을 문자열 리터럴하지 않았다 왜 당신의 문자열

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

에서 \r\n 문자가 있어야합니다. 해당 회선을 제거하고 테스트하십시오. \W은 "모든 단어가 아닌 문자"를 의미합니다. 이 문자를 제외한 문자는 [a-zA-Z0-9_] 자입니다. 희망이

+0

이 사례는 기자, 양수인 및 계정 관리자 필드 (단 한 줄의 전자 메일 주소)로만 구성되며 이름이 같은 것처럼 표시됩니다. 필자가 텍스트를 가져온 필드는 "회사 설명"으로, 문자열을 서식 지정하고 영숫자가 아닌 문자 ("\ W")를 제거하는 경우는 입력하지 않습니다. – Schadenfreude