JSON을 성형 및 색칠하여 표시하는 CLI를 만들어 보았습니다.

3944 단어 5JSONcli

만든 것



JSON을 보기 쉽게 정형하고 요소의 형태에 따라 색을 붙여 표시하는 CLI를 만들었다.
작은 JSON을 확인하고 싶은 경우에, 단지 성형해서 출력하는 것만으로는, 어느 값이 무슨 의미를 가지는지 등을 알기 어렵다. 또, 보기 쉽게 하기 위해 에디터를 여는 것도 귀찮습니다.
그 때문에, 색칠해 곧바로 출력하는 툴 만들어 버릴 것이라고 생각해, 이번 CLI를 작성해 보았다.

창조물은 htps : // 기주 b. 코 m / x - 코 r / jc에 올려져 있다.



사용한 라이브러리


  • spf13/cobra

  • spf13/cobra 는 CLI 작성용의 라이브러리. 이것을 사용하면 쉽게 좋은 느낌의 CLI를 만들 수 있기 때문에 매우 편리합니다.

    내부 처리 (알 수없는 JSON을 구문 분석하는 방법)



    Go 언어로 미리 구조를 알고 있는 JSON을 읽어들일 때에는, 구조체를 사전에 정의하는 것으로 구조체에 값을 흘려 넣을 수 있다.
    그러나 알 수없는 JSON을로드 할 때 구조체를 미리 정의 할 수 없습니다. 구조체를 정의하지 않고 Go의 표준 기능을 사용하여 JSON을 읽으면, 읽은 데이터의 형태는 interface{}가 되어 버려 형 고유의 다양한 처리를 실시할 수 없게 되어 버린다.
    그러므로, 읽어들인 데이터에 대해 무언가 처리를 하고 싶은 경우에는, 처리 내용에 따라서 형을 변환할 필요가 나온다.

    이번에 만든 CLI에서는
  • 색을 지정하는 요소 (숫자, 문자열, 진위 값) 결정
  • 객체와 배열의 요소를 가져옵니다.

    의 2점을 실시하기 위해서, 형 변환을 실시할 필요가 있었다.
    interface{}를 다른 유형으로 변환 할 때 switch와 Type Assertion을 사용하면 쉽게 할 수 있습니다.

    실제로 사용한 코드를 간략화한 것이 다음과 같다.
    func dataToString(data interface{}) string {
        switch convertedData := data.(type) {
        case int64, float64:
            return numberToString(data) // 要素が数値の時の処理
        case bool:
            return boolToString(data) // 要素が真偽値の時の処理
        case string:
            return stringToString(data) // 要素が文字列の時の処理
        case []interface{}
            return sliceToString(convertedData) // 要素が配列の時の処理
        case map[string]interface{}:
            return objToString(convertedData) // 要素がオブジェクトの時の処理
        }
        return ""
    }
    

    위의 함수는 interface{} 유형의 데이터를 수신하고 해당 데이터의 유형을 구문 분석하고 색칠 된 문자열로 변환합니다.
    타입이 []interface{}그 때문에, 읽어들인 미지의 JSON 데이터를 이 함수에 건네주는 것으로, 재귀적으로 형을 해석해 색 붙인 캐릭터 라인으로 변환해 갈 수 있게 되어 있다.
  • 좋은 웹페이지 즐겨찾기