首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EclipseLink MOXy JSON绑定,BackSlash '\‘逃逸问题

EclipseLink MOXy JSON绑定,BackSlash '\‘逃逸问题
EN

Stack Overflow用户
提问于 2013-09-24 19:58:06
回答 1查看 2.3K关注 0票数 3

我试图使用EclipseLink MOXy (JSON绑定)将JSON字符串转换为Java对象。当JSON字符串包含'\‘字符时,我将得到以下异常。下面是我想要做的事情的示例程序。我应该如何避免反斜杠,以便将TestBean中的name属性填充为"A\B"?

代码语言:javascript
复制
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;

public class JSONMoxyTest {

    public static void main(String[] args) throws JAXBException {
        Unmarshaller unmarshaller = JAXBContext.newInstance(TestBean.class).createUnmarshaller();
        unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json");
        unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
        String jsonStr = "{\"name\":\"A\\B\"}"; //{"name":"A\B"}
        TestBean bean = unmarshaller.unmarshal(new StreamSource(new StringReader(jsonStr )), TestBean.class).getValue();
        System.out.println(bean.getName());
    }
}

class TestBean {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

Exception:
line 1:10 no viable alternative at character '\'
line 1:11 no viable alternative at character 'B'
line 1:14 mismatched character '<EOF>' expecting '"'
line 0:-1 no viable alternative at input '<EOF>'
Exception in thread "main" javax.xml.bind.UnmarshalException
 - with linked exception:
[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: NoViableAltException(-1@[])]
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.handleXMLMarshalException(JAXBUnmarshaller.java:980)
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:303)
    at org.gs1us.glnreg.util.usps.JSONMoxyTest.main(JSONMoxyTest.java:17)
Caused by: Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: NoViableAltException(-1@[])
    at org.eclipse.persistence.exceptions.XMLMarshalException.unmarshalException(XMLMarshalException.java:113)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.convertSAXException(SAXUnmarshaller.java:996)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:984)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:425)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:635)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:703)
    at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:655)
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:301)
    ... 1 more
Caused by: NoViableAltException(-1@[])
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.value(JSONParser.java:673)
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.pair(JSONParser.java:372)
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.object(JSONParser.java:224)
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.message(JSONParser.java:127)
    at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:124)
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:972)
    ... 6 more

我正在使用这些jars: org.eclipse.sistence.antlr-2.5.0.jar,org.eclipse.sistence.as-2.5.0.jar,org.eclipse.sistence.core-2.5.0.jar,org.eclipse.retence.moxy-2.5.0.jar

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-25 13:17:51

在JSON中,\字符必须转义为\\

修正的

代码语言:javascript
复制
import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;

public class JSONMoxyTest {

    public static void main(String[] args) throws JAXBException {
        Unmarshaller unmarshaller = JAXBContext.newInstance(TestBean.class).createUnmarshaller();
        unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json");
        unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
        String jsonStr = "{\"name\":\"A\\\\B\"}"; //{"name":"A\\B"}
        TestBean bean = unmarshaller.unmarshal(new StreamSource(new StringReader(jsonStr )), TestBean.class).getValue();
        System.out.println(bean.getName());
    }

}

输出

代码语言:javascript
复制
A\B
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18990895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档