XML 파일 을 JSon 문자열 로 변환 하 는 방법
4716 단어 상용 방법
사용 한 jar 패키지:
jdom ,fastjson(alibaba)
전환 방향:
절 차 는 다음 과 같다.
1. xml 파일 을 문자열 로 변환 합 니 다. xml 파일 을 읽 어서 가 져 오고 Decument 으로 변환 할 수 있 습 니 다.Decument 을 변환 할 때 xml 파일 을 스 트림 형식 으로 변환 하고 인 코딩 방식 은 utf - 8 로 중국어 의 난 장 판 을 방지 해 야 합 니 다.
2. Decument 방법 을 사용 하여 루트 노드 를 가 져 오고 노드 안의 모든 하위 노드 를 옮 겨 다 니 며 각 노드 를 JSonobject 로 변환 합 니 다.
3. 시간 이 지나 면 노드 의 속성 과 노드 아래 의 하위 노드 는 같은 등급 에 있 고 속성 은 앞 에 있 으 며 하위 노드 는 뒤에 있다.여러 속성 이나 하위 노드 가 있 으 면 하나의 list 로 포장 하고 가장 바깥쪽 에 있 는 JSONobject 에 넣 습 니 다.
탭 을 옮 겨 다 니 는 방법:
1. 순환 을 한 번 설정 하고 순환 하 는 횟수 는 뿌리 노드 의 다음 노드 의 개수 입 니 다.
2. 현재 노드 에 속성 값 이 포함 되 어 있 는 지 판단 합 니 다. 포함 되 어 있 으 면 속성 값 을 모두 꺼 내 list 에 넣 고 이 list 를 옮 겨 다 니 며 속성의 이름과 값 을 꺼 내 JSONobject 에 넣 고 마지막 으로 list 에 넣 습 니 다.하나의 원소 속성 값 과 그의 하위 원소 의 값 은 같은 등급 이다.
3. 현재 요소 에 다른 하위 요소 가 있 는 지 판단 합 니 다. 현재 요 소 를 루트 요소 로 재 귀적 으로 옮 겨 다 니 는 방법 이 있 으 면.
4. JSONobject 에 노드 의 속성 을 추가 한 다음 에 이 노드 의 하위 노드 를 추가 할 때 이전의 노드 를 선택 하여 확대 해 야 한다.
자바 코드 는 다음 과 같 습 니 다:
public class JsonParse2 {
public static String xml2JSON(String xml) {
JSONObject json = new JSONObject();
byte[] byteStream = null;
try {
byteStream = xml.getBytes("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
InputStream is = new ByteArrayInputStream(byteStream);
SAXBuilder sb = new SAXBuilder();
org.jdom.Document doc = null;
try {
doc = sb.build(is);
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
Element root = doc.getRootElement();
json.put(root.getName(), iterateElement(root));
String jsonString = json.toJSONString();
return jsonString;
}
private static JSONObject iterateElement(Element element) {
List node = element.getChildren();
Element et = null;
JSONObject obj = new JSONObject();
// , list,
List list = null;
//
for (int i = 0; i < node.size(); i++) {
list = new LinkedList<>();
et = (Element) node.get(i);
//
if (et.getAttributes().size() > 0) {
//
List attributes = et.getAttributes();
// jsonobject
JSONObject attrvalue = new JSONObject();
// list
List attrvalues = new ArrayList<>();
for (Attribute attr : attributes) {
// jsonobject
attrvalue.put(attr.getName(),attr.getValue());
}
attrvalues.add(attrvalue);
obj.put(et.getName(), attrvalues);
}
//
if (et.getTextTrim().equals("")) {
if (et.getChildren().size() == 0)
continue;
// obj
if (obj.containsKey(et.getName())) {
// , list
list = (List) obj.get(et.getName());
}
list.add(iterateElement(et));
obj.put(et.getName(), list);
} else {
if (obj.containsKey(et.getName())) {
list = (List) obj.get(et.getName());
}
list.add(et.getTextTrim());
obj.put(et.getName(), list);
}
}
return obj;
}
}
테스트 용례:
202138621209
1234
+8612341234
테스트 결과:
{
"Envelope": {
"Body": [{
"PlaceOrder_LocalInput": [{
"PlaceOrder_LocalInput": [{
"loid": "111"
}, {
"AccountNum": ["202138621209"],
"ContactPhone": ["+8612341234"],
"ContactId": ["1234"]
}]
}]
}]
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
XML 파일 을 JSon 문자열 로 변환 하 는 방법xml 에서 json 으로 전환 할 때 이론 적 으로 모든 xml 파일 을 변환 할 수 있 습 니 다.다른 블 로 거들 이 쓴 코드 가 좋 은 것 을 많이 보 았 지만 프로그램의 사고방식 이 무엇 인지 정확히 쓰 지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.