我有一个类似的JSON:
{
"data":{
"mapping":[
{
"erp":"SYMIX",
"plant":"RY1",
"region":"NA"
},
{
"erp":"SAP",
"plant":"EXM",
"region":"ASIA"
}
]
}
}
我得到了植物的价值,我希望得到erp的价值。 就像我得到RY1 SYMIX需要获取。我怎样才能使用Java实现这一目标
答案 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;。 我显然已经把它变得有点通用了。但这是我应该思考的一般方法。