2016-08-19 2 views
0

에 JSON 값을 가져 오는 방법 :나는 같은 JSON이 조건

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

을 나는 ERP의 값을 얻기 위해 원하는 기준에 식물의 가치를 얻을. RY1 SYMIX가 가져와야 할 때와 같습니다. 나는 자바

를 사용하여이를 달성 할 수있는 방법 쉽게 jayway 라이브러리를 사용하여 수행 할 수
+1

json 라이브러리는 무엇을 사용하고 있습니까? –

+0

매핑을 위해 하나의 pojo 클래스를 만들고 JSON 값을 사용하여 해당 클래스의 목록을 만들어야합니다. 그러면 목록에서 객체를 쉽게 얻을 수 있습니다. – Vickyexpert

+0

@RakeshGR org.JSON을 사용하고 있습니다. –

답변

1

:

<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); 
} 
} 

출력은 다음과 같습니다 SYMIX


업데이트 된 날짜 :

좋아, 여기 버전은 파일에서 읽기 :

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.List; 

import com.jayway.jsonpath.JsonPath; 

public class TestJson { 
    public static void main(String[] args) throws Exception { 
     String pathToFile = "file.json"; 
     String plant = "RY1"; 

     File file = openFile(pathToFile); 
     String erp = readErpFromFile(file, plant); 
     System.out.println("Erp: " + erp); 
    } 

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

    private static File openFile(String strPath) throws IOException { 
     Path path = Paths.get(strPath); 
     System.out.println("Trying to read file: " + path.toAbsolutePath().toString()); 
     return path.toFile(); 
    } 
} 

그냥 파일의 경로 "file.json"문자열을 대체합니다.

+0

잘 동작합니다. . . JSON이 파일에 있으므로 String 변수로 변환 할 수 있습니까? –

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 전화 (매핑, "공장", "ERP", "RY1") 그리고 "SYMIX"를 반환해야합니다.
나는 obviouly 그것을 조금 일반적으로 만들었습니다. 그러나 이것이 내가 생각해야하는 일반적인 접근법입니다.

관련 문제