我有以下JSON文本。如何解析它以获得pageName
、pagePic
和post_id
等的值。?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
30条答案
按热度按时间cxfofazt16#
org.json库易于使用。
请记住(在转换或使用
getJSONObject
和getJSONArray
等方法时)JSON符号中[ … ]
表示一个数组,所以库将把它解析为JSONArray
{ … }
表示一个对象,因此库将把它解析为JSONObject
示例代码如下:
您可以从中找到更多示例:Parse JSON in Java
可下载jar:http://mvnrepository.com/artifact/org.json/json
waxmsbnn17#
如果您有一些表示JSON字符串(jsonString)的Java类(比如消息),则可以使用Jackson JSON库:
从消息对象中,您可以获取其任何属性。
flmtquvp18#
除了其他答案之外,我推荐这个在线开源服务jsonschema2pojo.org,用于从GSON、Jackson 1.x或Jackson 2.x的json或json模式快速生成Java类。例如,如果您有:
GSON的jsonschema2pojo.org生成:
lsmepo6l19#
Java中有许多可用的JSON库。
最臭名昭著的是:Jackson、GSON、Genson、FastJson和org.json。
在选择任何库时,通常应注意以下三点:
1.性能
1.易于使用(代码编写简单易读)-与功能相匹配。
1.对于移动应用程序:依赖项/jar大小
特别是对于JSON库(以及任何序列化/反序列化库),数据绑定通常也很有趣,因为它不需要编写锅炉板代码来打包/解包数据。
对于1,请参阅这个基准:我使用JMH做的https://github.com/fabienrenaud/java-json-benchmark,它比较了使用流和数据绑定API的序列化器和反序列化器(jackson、gson、genson、fastjson、org.json、jsonp)的性能。对于2,你可以在互联网上找到许多例子。上面的基准也可以用作示例源。。。
基准测试的快速总结:*Jackson**的性能比org.json好5到6倍,比GSON好两倍以上。
对于您的特定示例,以下代码使用jackson解码json:
如果你有任何问题,请告诉我。
cmssoen220#
这件事如此简单,让我大吃一惊。您可以将保存JSON的
String
传递给默认org.JSON包中JSONObject的构造函数。完成将麦克风放下。这也适用于
JSONObjects
。之后,您可以使用对象上的get()
方法查看Objects
的层次结构。evrscar221#
我认为最佳实践应该是通过仍在进行中的官方Java JSON API。
qzwqbdag22#
由于还没有人提到它,这里是使用Nashorn(Java8的JavaScript运行时部分,但在Java11中不推荐)的解决方案的开始。
解决方案
性能比较
我编写的JSON内容包含三个数组,分别包含20、20和100个元素。我只想从第三个数组中得到100个元素。我使用以下JavaScript函数来解析和获取我的条目。
使用Nashorn运行调用一百万次需要7.5~7.8秒
org。json需要20~21秒
Jackson需要6.5~7秒
在这种情况下,Jackson的性能比Nashorn好,Nashorn的性能比org.json好得多。Nashorn API比org.json或Jackson的更难使用。根据您的需求,Jackson和Nashorn都是可行的解决方案。
6tr1vspr23#
下面的示例显示如何读取问题中的文本,表示为“jsonText”变量。该解决方案使用Java EE7 javax.json API(在其他一些答案中提到)。我之所以将其作为单独的答案添加,是因为以下代码显示了如何实际访问问题中显示的一些值。运行此代码需要implementation of the javax.json API。由于我不想声明“import”语句,所以包含了每个所需类的完整包。
现在,在任何人因为不使用GSON、org.json、Jackson或任何其他可用的第三方框架而投票否决这个答案之前,这是每个问题的“必需代码”的一个示例,用于解析提供的文本。我很清楚,adherence to the current standard JSR 353 was not being considered for JDK 9和JSR 353 spec应该与任何其他第三方JSON处理实现一样对待。
xfb7svmp24#
使用minimal-json,它非常快速且易于使用。您可以从字符串obj和Stream进行解析。
样本数据:
解析:
创建JSON:
梅文:
iqih9akk25#
几乎所有给出的答案都要求在访问感兴趣属性中的值之前将JSON完全反序列化为Java对象。另一种选择是使用JsonPATH,它类似于JSON的XPath,允许遍历JSON对象。
这是一个规范,JayWay的好员工已经为该规范创建了一个Java实现,您可以在这里找到:https://github.com/jayway/JsonPath
因此,基本上要使用它,请将其添加到您的项目中,例如:
并使用:
等
查看JsonPath规范页面,以了解有关横向JSON的其他方法的更多信息。
kmpatx3s26#
A-解释
您可以使用Jackson库将JSON字符串绑定到POJO(普通旧Java对象)示例。POJO只是一个只有私有字段和公共getter/setter方法的类。Jackson将遍历这些方法(使用反射),并将JSON对象Map到POJO示例中,因为类的字段名与JSON对象的字段名匹配。
在JSON对象中,它实际上是一个复合对象,主对象由两个子对象组成。因此,我们的POJO类应该具有相同的层次结构。我将整个JSON对象称为页面对象页面对象由PageInfo对象和Post对象数组组成。
因此,我们必须创建三个不同的POJO类;
*页面类,由PageInfo类和Post示例数组组成
*页面信息类
*职位类别
我使用的唯一软件包是Jackson ObjectMapper,我们所做的是绑定数据;
所需的依赖项、jar文件如下所示;
*jackson-core-2.5.1.jar
*jackson-databind-2.5.1.jar
*jackson-annotations-2.5.0.jar
这是所需的代码;
B-主POJO类:第页
C-子POJO类:PageInfo
D-儿童POJO类:Post
E-示例JSON文件:sampleJSONFile.JSON
我刚刚将JSON示例复制到这个文件中,并将其放在项目文件夹下。
F-演示代码
G-演示输出
cgfeq70w27#
您可以使用Google Gson。
使用这个库,您只需要创建一个具有相同JSON结构的模型。然后自动填充模型。您必须将变量称为JSON键,如果您想使用不同的名称,则使用
@SerializedName
。JSON
从你的例子:
模型
解析
现在您可以使用Gson库进行解析:
grad进口
记住在app Gradle文件中导入库
自动模型生成
您可以使用this等在线工具从JSON自动生成模型。
yuvru6vn28#
quick-json parser非常简单、灵活、快速且可定制。试试看
特征:
它可以这样使用:
a0zr77ik29#
1.如果想从JSON创建Java对象,反之亦然,请使用GSON或JACKSON第三方JAR等。
1.但是,如果您只想解析JSON字符串并获取一些值(或者从头创建JSON字符串以通过有线发送),只需使用JaveEE jar,它包含JsonReader、JsonArray、JsonObject等。您可能需要下载该规范的实现,如javax.JSON。通过这两个JAR,我能够解析json并使用值。
这些API实际上遵循XML的DOM/SAX解析模型。
zengzsys30#
为了示例的目的,假设您有一个类**
Person
**,其中只有一个name
。Google GSON(Maven)
我个人最喜欢的是对象的JSON序列化/反序列化。
更新
如果您想获得单个属性,也可以使用Google库轻松完成:
Org.JSON(Maven)
如果您不需要对象反序列化,只需要获取属性,可以尝试org.json(或查看上面的GSON示例!)
Jackson(Maven)