2012-06-22 3 views
1

Joomla 응용 프로그램에서 jQuery 위젯을 사용하고 있습니다. 위젯의 데이터는 객체와 json 형식이어야합니다. Joomla 프레임 워크의 데이터베이스 기능없이 데이터베이스에서 직접 데이터를 검색 할 때 얻을 수 있습니다.JSON 데이터 개체 또는 배열, 확인하는 방법?

물론 Joomla MVC 구조에서 수행하고 싶습니다. Joomla 데이터베이스 기능을 활용하고 싶습니다. 그것을 할 때 위젯에 출력이 없습니다.

이전에 배열로 전달할 때 객체로 전달할 때 데이터가 표시되지 않습니다.

내 문제는 다음과 같습니다. 데이터베이스에서 직접 데이터를 생성하고 Joomla 데이터베이스 구조를 사용하면 화면에 에코 될 때 똑같은 결과가 생성되지만 하나는 눈금에 표시되고 다른 하나는 표시되지 않습니다. 이전의 문제에서도 마찬가지 였지만이 경우 동일한 데이터에서 json_encode를 두 번 호출했지만 표시되는 데이터에는 아무런 차이가 없었지만 하나는 작동하고 다른 하나는 그렇지 않습니다.

내 질문 : 아직 JSON 데이터에 익숙하지 않지만 데이터가 개체 또는 배열로 표시되는지 확인하는 방법이 있습니까? 이것은 아마도 매우 바보 같은 질문 일지 모르지만 데이터에 차이가 있어야하며 단순히 그것을 보았을 때, 당신이 그것을 볼 수 없거나, 뭔가를 놓치고있는 것처럼 보입니다.

업데이트 : 응답 감사합니다. 나는 며칠 동안 이것에 앉아 있었다!! 그것은 Joomla 데이터베이스 함수와 함께 지금 일하고있다, 그것은 json 인코딩을 제외하고 내 코드로 사소한 문제가있는 것 같지만 그들이 json_encode를 모델과 컨트롤러 모두에서 사용하기 전에 정확히 이렇게 보였다. 따라서 double json으로 인코딩했다. , 작동하지 않았지만 Joomla 외부에서 생성 된 경우 작동했습니다 (json_encoding의 단일 사용). Joomla의 외부에서 생성 된 것을보고 double json 인코딩을 한 후에 두 가지 모두 똑같이 보였으므로 출력을 보면서 문제를 찾지 못했습니다. []{}에 관한 정보, 즉 여기 통찰력 만에

덕분에 내 코드의 예입니다

[{"TotalRows":2,"Rows":[{"login_id":"122","cust_id":"0","shop_id":"0","nickname":null,"shopicon":null,"website":null,"shopname":null, "username":"","password":"","dob":"0000-00-00","comments":null}, 
{"login_id":"25","cust_id":"57","shop_id":"42","nickname":"qwerty","shopicon":"shop.ico","website":"http:\/\/www.shop.co.uk","shopname":"Shop","username":"eqweq","password":"wqewqeq","dob":"1981-12-14","comments":"qwqeqeqw"}]}] 

어떻게 그것을 배열이나 객체인지이에서 알 수 있습니까?

+2

{} = object, [] = array. 샘플이 도움이 될 것입니다. 또한, 당신은 구문을 확인할 수 있습니다 : http://jsonlint.com/ –

+0

괜찮은 곧장 앞으로 보인다 ... Joomla 데이터베이스 구조는 그렇게 어렵지 않다. $ result = $ db-> loadObject()'와 함께'$ db-> setQuery ($ query); '를 사용해야하는데, 이제 php 객체가 생겼습니다. 단순히 echo'json_encode ($ result);를 사용하면 json 객체를 클라이언트에 출력 할 것이고, 클라이언트는'$ .parseJSON'을 사용하여 파싱 할 수 있습니다. 아약스를 사용한다면'dataType = "json"과 자동으로 구문 분석합니다. 'obj.prop'에 의해 객체 프라퍼티에 접근 할 수 있습니다. – Ohgodwhy

+0

@Diodeus가 말한 것에 대해 더 자세히 설명합니다 ... {}은 객체이지만'' ''로 묶여 있으면 문자열 일 수도 있습니다. 이것은 JSON 문자열이며 객체가 아닙니다. – Ohgodwhy

답변

1

JSON 문자열이있는 경우 공백이 아닌 첫 번째 심볼이 { 또는 [인지 간단히 확인할 수 있습니다. {은 최상위 레벨이 일반 객체임을 의미합니다 (배열은 객체이기도합니다!) [ - 배열. 또한 객체를 구문 분석하고 결과에 instanceof Array이 true인지 확인할 수 있습니다.

+0

그러므로'[{'는 객체의 배열을 의미합니까? – jmarais

+0

개체가 첫 번째 요소 인 배열. 다음 요소를 배열 또는 간단한 숫자 또는 문자열로 쉽게 따라갈 수 있습니다. –

+0

OK! 그래서'[{}, {}, {}, {}, {}]'는 배열의 객체입니까? '{{[{}, {}, {}, {}, {}}}]'은 하나의 객체를 포함하고이 객체는 객체 배열을 포함하는 배열입니까? – jmarais

0

그들은 매우 달라야합니다 :

var arr = [1, 2, 3, 4]; 
console.log(JSON.stringify(arr)); // prints "[1,2,3,4]" 
var obj = { a: 1, b: 2, c: 3, d: 4 }; 
console.log(JSON.stringify(obj)); // prints "{"a":1,"b":2,"c":3,"d":4}". 

당신은 어떤 입력과 출력 (일부 코드)를 보여 주시겠습니까 그래서 우리는 무슨 일이 일어나고 있는지 볼 수 있습니까?

+0

@Oleg에 응답하고 싶었지만 잘못된 장소에 넣고 싶었습니다. – jmarais

0

죄송합니다 user1154041, 이것은 정확하게 대답은 아니지만 나무에 대한 나무를 보는 데 도움이 될 수 있습니다. 개발자가 배포 준비가 완료된 JavaScript (또는 하위 집합 JSON)를 가져 오면 모든 공백을 제거한다는 의미입니다. 자바 스크립트 엔진과 아무런 차이가 없지만 인간이 읽을 수는 없습니다. 축소 된 코드를 다시 포맷팅하는 것은 때로는 '우화 (prettify)'라고하며 프로세스는 특수한 도구가 필요합니다.요즘 내가 사용하는 모든 편집기에는 예제와 같은 JavaScript 또는 JSON 문자열을 사용하고 아래 예제처럼 훨씬 더 읽기 쉬운 형식으로 서식을 지정하는 '형식'함수가 있습니다 (유효한 JavaScript를 만들기 위해 var 문을 추가해야했습니다. 내 편집기 이해할 수 있도록) 무엇을 :

var test = [{ 
    "TotalRows": 2, 
    "Rows": [{ 
     "login_id": "122", 
     "cust_id": "0", 
     "shop_id": "0", 
     "nickname": null, 
     "shopicon": null, 
     "website": null, 
     "shopname": null, 
     "username": "", 
     "password": "", 
     "dob": "0000-00-00", 
     "comments": null 
    }, { 
     "login_id": "25", 
     "cust_id": "57", 
     "shop_id": "42", 
     "nickname": "qwerty", 
     "shopicon": "shop.ico", 
     "website": "http://www.shop.co.uk", 
     "shopname": "Shop", 
     "username": "eqweq", 
     "password": "wqewqeq", 
     "dob": "1981-12-14", 
     "comments": "qwqeqeqw" 
    }] 
}] 

을 나는 아직도 [] 배열을 나타내며, {} 객체,하지만 당신은 그것을 훨씬 쉽게 동의하지 않는 사실에 익숙해 알고 만나다? 그래서, 당신이 그런 문자열에 의아해 할 때, 자바 스크립트 편집을 위해 설계된 Aptana http://www.aptana.com과 같은 IDE를여십시오. 자바 스크립트 파일을 만들고 문자열을 var에 할당하고 형식 버튼을 누릅니다. 그렇게하면 코드의 구조를 파악할 기회가 반으로 줄어 듭니다.

+0

OK! 그래서'[{}, {}, {}, {}, {}]'는 배열의 객체입니까? – jmarais

+0

@ user1154041 정확 하 게! 지금 보는 게 훨씬 쉽지, 안 그래? 그러나 올렉 (Oleg)이 지적했듯이 객체에는 문자열이나 배열이 쉽게 따라 올 수 있습니다. 예 : [{}, {}, "hello", [ "a", "b"]}. JavaScript 배열의 각 요소는 원하는 유형이 될 수 있습니다. JSON은 조금 더 엄격하지만 기본적으로 같은 생각입니다. 그것이 무엇이든, prettifying 또는 서식을 쉽게 알아낼 수 있습니다. – DavidHyogo

3

다음 코드는 모든 키를 가져 오는 데 사용되며 연관된 값이 배열 또는 json 객체 또는 문자열 값 형식 인 곳을 확인합니다.

Iterator<?> rootIter = jsonData.keys(); 
while (rootIter.hasNext()) 
{ 
    String name = (String) rootIter.next(); 
    Object obj = jsonData.get(name); 
    if (obj instanceof JSONObject) 
    { 
     JSONObject jsonObj = (JSONObject) obj; 
    } 
    else if(obj instanceof JSONArray) 
    { 
     JSONArray jsonArray = (JSONArray) obj; 
    } 
    else 
    { 
     String values = obj.toString(); 
    }   
}