我有一个JSON如下。
[{
"empid": "1",
"name": "Mark"
},
{
"empid": "2",
"name": "Steve"
},
{
"empid": "1",
"name": "Luke "
}
]
根据empid作为输入,我需要获得适当的名称
我试过这个工作。
但是没有循环是否有任何简单的方法?
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class JSONPArseEx {
public static void main(String[] args) throws JSONException {
String empIdInput = "2";
String jsonStr = "[{\r\n" +
" \"empid\": \"1\",\r\n" +
" \"name\": \"Mark\"\r\n" +
" \r\n" +
" },\r\n" +
" {\r\n" +
" \"empid\": \"2\",\r\n" +
" \"name\": \"Steve\"\r\n" +
" \r\n" +
" },\r\n" +
" {\r\n" +
" \"empid\": \"1\",\r\n" +
" \"name\": \"Luke \"\r\n" +
" \r\n" +
" }\r\n" +
"]";
JSONArray jsonarray = new JSONArray(jsonStr);
for(int i=0;i<jsonarray.length();i++)
{
JSONObject json_obj = jsonarray.getJSONObject(i);
if(json_obj.get("empid").equals(empIdInput))
{
System.out.println(json_obj.get("name"));
}
}
}
}
输出
史蒂夫
答案 0 :(得分:0)
更方便的处理可以使用流API(自Java 8起)。例如:
final Optional<JsonObject> result = empArray.stream()
.map(empVal -> (JsonObject) empVal)
.filter(emp -> empIdInput.equals(emp.getString("empid")))
.findAny();
result.ifPresent(emp -> System.out.println(emp.get("name")));
要解决未经检查的演员,您可以添加一些过滤:
final Optional<JsonObject> result = empArray.stream()
.filter(empVal -> empVal instanceof JsonObject)
.map(empVal -> (JsonObject) empVal)
.filter(emp -> empIdInput.equals(emp.getString("empid")))
.findAny()
.ifPresent(emp -> System.out.println(emp.get("name")));
as&#34; empid&#34;似乎不是唯一的,你可能想得到一个结果列表:
final List<JsonObject> result = empArray.stream()
.filter(empVal -> empVal instanceof JsonObject)
.map(empVal -> (JsonObject) empVal)
.filter(emp -> empIdInput.equals(emp.getString("empid")))
.collect(Collectors.toList());
答案 1 :(得分:0)
您必须遍历数组进行检查,但如果您不想使用循环 - 您可以使用Java 8 Streams:
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
public class JSONStreamExample {
private static final String empIdInput = "2";
private static final String jsonStr = "[{\r\n" +
" \"empid\": \"1\",\r\n" +
" \"name\": \"Mark\"\r\n" +
" \r\n" +
" },\r\n" +
" {\r\n" +
" \"empid\": \"2\",\r\n" +
" \"name\": \"Steve\"\r\n" +
" \r\n" +
" },\r\n" +
" {\r\n" +
" \"empid\": \"1\",\r\n" +
" \"name\": \"Luke \"\r\n" +
" \r\n" +
" }\r\n" +
"]";
/**
* @param args
*/
public static void main(final String[] args) {
@SuppressWarnings("unchecked")
List<JSONObject> jsonArray = (JSONArray) JSONValue.parse(jsonStr);
JSONObject result = jsonArray.stream()
.filter(obj -> obj.get("empid").equals(empIdInput))
.findFirst()
.orElse(null);
if (result != null) {
System.out.println(result.get("name"));
}
}
}
请注意,这使用了json-simple,您可以在maven存储库here上找到它。