java jettison_java - 使用Jettison进行JSON解析 - 堆栈内存溢出

如果您最终正在寻找使用JAXB(JSR-222)实现与JSON交互的方法,那么以下是使用MOXy完成它的方法。 Jettison是一个有趣的库,但是你会遇到一些问题:

演示

仅使用标准Java SE API。 需要在Unmarshaller上设置两个MOXy特定属性: "eclipselink.media-type"指定"application/json" , "eclipselink.json.include-root"指示没有根节点。

package forum9924567;

import java.io.StringReader;

import java.util.ArrayList;

import javax.xml.bind.*;

import javax.xml.transform.stream.StreamSource;

public class Demo {

private static final String s ="{\"appUsage\":[{\"appName\":\"ANDROID\",\"totalUsers\":\"0\"},{\"appName\":\"IOS\",\"totalUsers\":\"4\"}]}";

public static void main(String[] args) throws Exception {

JAXBContext jc = JAXBContext.newInstance(Root.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();

unmarshaller.setProperty("eclipselink.media-type", "application/json");

unmarshaller.setProperty("eclipselink.json.include-root", false);

StreamSource json = new StreamSource(new StringReader(s));

Root root = unmarshaller.unmarshal(json, Root.class).getValue();

ArrayList customer = root.appUsage;

for(MiAppUsage miAppUsage : customer) {

System.out.print(miAppUsage.appName);

System.out.print(' ');

System.out.println(miAppUsage.totalUsers);

}

}

}

我不得不介绍这个课程来满足你的用例。 如果你的JSON看起来像我们可以消除这个类: [{"appName":"ANDROID","totalUsers":"0"},{"appName":"IOS","totalUsers":"4"}] 。

package forum9924567;

import java.util.ArrayList;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)

public class Root {

ArrayList appUsage;

}

MiAppUsage

package forum9924567;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)

public class MiAppUsage {

String appName;

int totalUsers;

}

jaxb.properties

要将MOXy指定为JAXB提供程序,您需要添加一个名为java.properties的文件,并在与您的域类相同的包中添加以下条目:

javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory

产量

以下是运行演示代码的输出:

ANDROID 0

IOS 4

欲获得更多信息

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值