如何在条件下获取JSON值

时间:2016-08-19 09:41:29

标签: java json

我有一个类似的JSON:

{
   "data":{
      "mapping":[
         {
            "erp":"SYMIX",
            "plant":"RY1",
            "region":"NA"
         },
         {
            "erp":"SAP",
            "plant":"EXM",
            "region":"ASIA"
         }
      ]
   }
}

我得到了植物的价值,我希望得到erp的价值。 就像我得到RY1 SYMIX需要获取。我怎样才能使用Java实现这一目标

2 个答案:

答案 0 :(得分:1)

使用jayway库可以轻松完成:

Visitor

示例:

Visitor

输出为: <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> </dependency>

更新:

好的,这里是从文件中读取的版本:

import java.util.List;

import com.jayway.jsonpath.JsonPath;

public class TestJson {
 private static final String JSON = "{\"data\":{\"mapping\":[{\"erp\":\"SYMIX\",\"plant\":\"RY1\",\"region\":\"NA\"},{\"erp\":\"SAP\",\"plant\":\"EXM\",\"region\":\"ASIA\"}]}}";

 public static void main(String[] args) {
     String erp = getErp("RY1");
     System.out.println(erp);
 }

 private static String getErp(String plant) {
     List<String> values = JsonPath.read(JSON, String.format("$.data.mapping.[?(@.plant==%s)].erp", plant));
     return values.isEmpty() ? null : values.get(0);
 }
}

只需替换&#34; file.json&#34;字符串到文件的路径。

答案 1 :(得分:0)

好的......我已经采取了一种非常直接的方法。 试试这个:

public static Object searchArrayofObjects(JSONArray array, String searchByKey, String resultKey, Object searchObject) throws JSONException
{
    Object result = null;
    for (int i = 0; i < array.length(); i++)
    {
        JSONObject innerObject = array.getJSONObject(i);
        if (innerObject.has(searchByKey) && innerObject.get(searchByKey).equals(searchObject))
        {
            result = innerObject.has(resultKey) ? innerObject.get(resultKey) : null;
            break;
        }
    }
    return result;
}

现在调用searchArrayofObjects(mapping,&#34; plant&#34;,&#34; erp&#34;,&#34; RY1&#34;)它应该返回&#34; SYMIX&#34;。 我显然已经把它变得有点通用了。但这是我应该思考的一般方法。