如何从Java的JSON字符串中找到指定的名称及其值?[已关闭]

2022-08-31 20:16:20

假设我们有下一个 JSON 字符串:

{  
   "name" : "John",
   "age" : "20",
   "address" : "some address",
   "someobject" : {
       "field" : "value"    
   }
}

查找字段及其值(或确定没有具有给定名称的字段)的最简单(但仍然正确,即正则表达式不可接受)的方法是什么?age

p.s. 任何开源库都可以。

p.s.2:请不要发布指向库的链接 - 这不是一个有用的答案。“向我显示代码”(c)。


答案 1

使用 JSON 库分析字符串并检索值。

以下非常基本的示例使用来自 Android 的内置 JSON 解析器

String jsonString = "{ \"name\" : \"John\", \"age\" : \"20\", \"address\" : \"some address\" }";
JSONObject jsonObject = new JSONObject(jsonString);
int age = jsonObject.getInt("age");

更高级的JSON库,如jacksongoogle-gsonjson-iogenson,允许您直接将JSON对象转换为Java对象。


答案 2

Gson允许最简单的解决方案之一。与 Jackson 或 svenson 等类似 API 相比,Gson 在默认情况下甚至不需要未使用的 JSON 元素即可在 Java 结构中使用绑定。具体到所提出的问题,这里有一个可行的解决方案。

import com.google.gson.Gson;

public class Foo
{
  static String jsonInput = 
    "{" + 
      "\"name\":\"John\"," + 
      "\"age\":\"20\"," + 
      "\"address\":\"some address\"," + 
      "\"someobject\":" +
      "{" + 
        "\"field\":\"value\"" + 
      "}" + 
    "}";

  String age;

  public static void main(String[] args) throws Exception
  {
    Gson gson = new Gson();
    Foo thing = gson.fromJson(jsonInput, Foo.class);
    if (thing.age != null)
    {
      System.out.println("age is " + thing.age);
    }
    else
    {
      System.out.println("age element not present or value is null");
    }
  }
}