2013-07-03 2 views
0

들어오는 데이터를 동적 필드 집합으로 구문 분석해야한다면 어떤 방법을 택해야합니까? 이 필드의 List을 요청할 수 있으므로 런타임에 필드 및 해당 이름의 양을 알 수 있습니다. 데이터를 구문 분석하고 나중에 사용하는 model을 생성하는 방법을 모르겠습니다. 제안 해 주셔서 감사합니다.동적 필드 집합을 사용하여 데이터를 구문 분석하는 방법은 무엇입니까?

+0

신청서에 대해 더 자세히 설명해 주시겠습니까? 가능한 속성 집합이 고정되어 있습니까? 누락 된 필드는 어떻게 처리해야합니까? – mariosangiorgio

+0

가능한 속성 집합이 고정되어 있지 않습니다. 데이터가 파싱 된 후에 나는 그것만을 표시 할 것이다. – Eugene

+2

2 개의 속성 (attr 이름 및 attr 값)을 가진 단순 bean은 좋을 것입니다. 그런 다음 컴포지션을 나열하는 몇 가지 비즈니스 클래스. 그러나 "완벽한 조회 신드롬"을주의하십시오. – BigMike

답변

0

javabean에서 애트리뷰트 이름/애트리뷰트 값 쌍과 함께 가고 싶지만, 추적하려면 애트리뷰트에 허용되는 값을 나열하는 비즈니스 클래스 (또는 인터페이스)를 추가해야한다.

는 코드가 말하는 보자

class Dog { 
    private List<MyBean> dataSet; 

    // Enumerate the possible values of MyBean.name for a valid Dog object 
    public final static String KIND = "kind"; 
    public final static String AGE = "age"; 
    public final static String BARFES = "heBarf"; 

    // Use a convenience Set for checks 
    public static Set<String> validAttributes; 

    // Put valid values in the convenience set once for all 
    static { 
    // trivial code to initialize the validAttributes set 
    } 

    // We won't add setters, better constructing a new object every time 
    public Dog(List<MyBean> v) { 
     dataSet = v; // better copying ? as usual it depends on scenarios. 
    } 

    // A convenience static to parse a string into this object. 
    public static Dog parse(String theStream) { 
     // cannot write since I don't know how is format, but this method can use the enumerations of the attribute names for checking. 
    } 

    // Accessor 
    public int getAge() { 
     return dataSet.get(Dog.AGE); 
    } 

} 

그럼 가능성은 무한하다 : 그 목록 중 하나가 개를 rappresents 경우

class MyBean { 
    String name; 
    Object value; 

    // Getters and setters 
} 

지금, 우리는 같은 클래스가있을 수 있습니다. 기본 클래스 (List)를 가져 비즈니스 클래스의 기본 클래스 (getter 및 적절한 생성자 추가)로 사용하거나 목록을 개인 데이터 멤버로 사용할 수 있습니다 (숨겨진 상태로 유지하십시오. 직접 입력하지 마십시오. 해당 참조에 대한 액세스).

일부 열거 형을 사용할 수도 있습니다. 중요한 메타 데이타 (이러한 메타 데이타이기 때문에)는 유효한 이름을 추적합니다 (컴파일 검사가 없으므로, 일을 모니터하기 위해 일종의 신속하고 먼지가 필요합니다).

추신 : 실제로는 개념의 증거 일뿐입니다 (아마도 컴파일되지 않을 것입니다).

0

귀하의 질문에 분명하지 않지만, 나는 대답하려고합니다. 필드 이름을 알고 있으면 명령 행에서 수행되고 매개 변수를 제공하고 값을 검색하므로 수행해야합니다. 구분 기호를 알고 있으면 구문 분석이 쉽습니다. 복잡한 데이터 구조의 경우 정규 표현식을 사용하여 구문을 분석하여 구문 분석 할 수 있습니다.

0

reflection을 사용할 수 있습니다.

또 다른 쉬운 방법 :

1) for 루프에서 JSON 문자열로 동적 목록을 구문 분석, 또는 필드 이름과 필드 값과 같은 값으로 키지도 대신 목록을 확인하십시오.

2) JSON 문자열 또는지도를 JSON lib으로 변환하십시오.

관련 문제