我有以下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"
    }
  ]
}

当前回答

我们可以使用JSONObject类将JSON字符串转换为JSON对象, 和遍历JSON对象。使用下面的代码。

JSONObject jObj = new JSONObject(contents.trim());
Iterator<?> keys = jObj.keys();

while( keys.hasNext() ) {
  String key = (String)keys.next();
  if ( jObj.get(key) instanceof JSONObject ) {           
    System.out.println(jObj.getString(String key));
  }
}

其他回答

首先,您需要选择一个实现库来执行此操作。

用于JSON处理的Java API (JSR 353)提供了使用对象模型和流API来解析、生成、转换和查询JSON的可移植API。

参考实现在这里:https://jsonp.java.net/

下面是JSR 353的实现列表:

哪些API实现了JSR-353 (JSON)

为了帮助你决定…我也找到了这篇文章:

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

如果您选择Jackson,这里有一篇关于使用Jackson在JSON和Java之间转换的好文章:https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

希望能有所帮助!

主要有两种选择……

Object mapping. When you deserialize JSON data to a number of instances of: 1.1. Some predefined classes, like Maps. In this case, you don't have to design your own POJO classes. Some libraries: org.json.simple https://www.mkyong.com/java/json-simple-example-read-and-write-json/ 1.2. Your own POJO classes. You have to design your own POJO classes to present JSON data, but this may be helpful if you are going to use them into your business logic as well. Some libraries: Gson, Jackson (see http://tutorials.jenkov.com/java-json/index.html)

映射的主要缺点是它会导致大量内存分配(以及GC压力)和CPU占用。

面向流的解析。例如,Gson和Jackson都支持这种轻量级解析。另外,您还可以查看一个自定义的、快速的、无gc的解析器示例https://github.com/anatolygudkov/green-jelly。在需要解析大量数据和对延迟敏感的应用程序中,更倾向于使用这种方式。

阅读下面的博文,Java中的JSON。

这篇文章有点老了,但我仍然想回答你的问题。

步骤1:创建数据的POJO类。

步骤2:现在使用JSON创建一个对象。

Employee employee = null;
ObjectMapper mapper = new ObjectMapper();
try {
    employee =  mapper.readValue(newFile("/home/sumit/employee.json"), Employee.class);
} 
catch(JsonGenerationException e) {
    e.printStackTrace();
}

如需进一步参考,请参阅以下链接。

如果你有一些Java类(比如Message)表示JSON字符串(jsonString),你可以使用Jackson JSON库:

Message message= new ObjectMapper().readValue(jsonString, Message.class);

你可以从message对象中获取它的任何属性。

Gson很容易学习和实现,我们需要知道的是以下两种方法

toJson() -将Java对象转换为JSON格式 fromJson() -将JSON转换为Java对象

`

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {

    Gson gson = new Gson();

    try {

        BufferedReader br = new BufferedReader(
            new FileReader("c:\\file.json"));

        //convert the json string back to object
        DataObject obj = gson.fromJson(br, DataObject.class);

        System.out.println(obj);

    } catch (IOException e) {
        e.printStackTrace();
    }

    }
}

`