programing

문자열을 확인하는 방법은 json 형식입니다.

newsource 2023. 2. 11. 09:27

문자열을 확인하는 방법은 json 형식입니다.

json 형식의 문자열이나 문자열만으로 입력되는 문자열을 받는 함수를 만들고 싶습니다.예를 들어, 다음과 같은 쉬운 기능.

func checkJson(input string){
   if ... input is in json ... {
      fmt.Println("it's json!")
   } else {
      fmt.Println("it's normal string!")
   }
}

스키마에 관계없이 JSON 문자열을 검증하는 방법을 찾는 다른 사용자는 다음을 시도해 보십시오.

func IsJSON(str string) bool {
    var js json.RawMessage
    return json.Unmarshal([]byte(str), &js) == nil
}

따옴표로 묶인 문자열에 대해서만 알 필요가 있는지, json에 대해 알 필요가 있는지, 아니면 둘 다 차이점을 알 필요가 있는지 잘 몰랐기 때문에 두 시나리오를 모두 검출하는 방법을 알 수 있으므로 매우 구체적으로 설명할 수 있습니다.

여기에도 인터랙티브 코드 샘플을 올렸습니다.http://play.golang.org/p/VmT0BVBJZ7

package main

import (
    "encoding/json"
    "fmt"
)

func isJSONString(s string) bool {
    var js string
    return json.Unmarshal([]byte(s), &js) == nil

}

func isJSON(s string) bool {
    var js map[string]interface{}
    return json.Unmarshal([]byte(s), &js) == nil

}

func main() {
    var tests = []string{
        `"Platypus"`,
        `Platypus`,
        `{"id":"1"}`,
    }

    for _, t := range tests {
        fmt.Printf("isJSONString(%s) = %v\n", t, isJSONString(t))
        fmt.Printf("isJSON(%s) = %v\n\n", t, isJSON(t))
    }

}

그러면 다음이 출력됩니다.

isJSONString("Platypus") = true
isJSON("Platypus") = false

isJSONString(Platypus) = false
isJSON(Platypus) = false

isJSONString({"id":"1"}) = false
isJSON({"id":"1"}) = true

표준.encoding/json라이브러리에 json이 포함되어 있습니다.유효한 기능은 go 1.9부터 시작됩니다.https://github.com/golang/go/issues/18086 를 참조해 주세요.이 함수는 제공된 문자열이 유효한 json인지 확인하기 위해 사용할 수 있습니다.

if json.Valid(input) {
    // input contains valid json
}

그렇지만json.Validfastjson 등의 서드파티 솔루션에 비해 상당히 느릴 수 있습니다.표준보다 최대 5배 빠른 검증json.Valid- 참조json validation참조할 수 있습니다.

예를들면,

package main

import (
    "encoding/json"
    "fmt"
)

func isJSONString(s string) bool {
    var js string
    err := json.Unmarshal([]byte(s), &js)
    return err == nil
}

func main() {
    fmt.Println(isJSONString(`"Platypus"`))
    fmt.Println(isJSONString(`Platypus`))
}

출력:

true
false

이것은 표준 라이브러리의 실제 기능에 대한 오래된 게시물일 수 있습니다.

그냥 json으로 하면 돼."encoding/json" 패키지의 Valid() 함수.

   var tests = []string{
    `"Platypus"`,
    `Platypus`,
    `{"id":"1"}`,
    `{"id":"1}`,
}

for _, t := range tests {
    fmt.Printf("is valid: (%s) = %v\n", t, json.Valid([]byte(t)))
    
}

예: https://play.golang.org/p/nfvOzQB919s

이 질문에 대한 답을 찾다가 https://github.com/asaskevich/govalidator,을 찾았습니다.이 블로그 포스트에는 입력 검증기(https://husobee.github.io/golang/validation/2016/01/08/input-validation.html)의 작성에 대한 설명이 기재되어 있습니다.혹시나 퀵라이브러리를 찾고 있는 사람이 있을지도 모르기 때문에, 그 툴을 찾기 쉬운 장소에 두는 것이 편리하다고 생각했습니다.

이 패키지는 isJ와 동일한 방법을 사용합니다.William King이 제안하는 SON은 다음과 같습니다.

// IsJSON check if the string is valid JSON (note: uses json.Unmarshal).
func IsJSON(str string) bool {
    var js json.RawMessage
    return json.Unmarshal([]byte(str), &js) == nil
}

이 패키지는 JSON in Go에 대한 더 큰 통찰력을 주었기 때문에 여기에 두면 도움이 될 것 같습니다.

현재 승인된 답변(2017년 7월 현재)은 JSON 어레이에 대해 실패하여 업데이트되지 않았습니다.https://repl.it/J8H0/10

이것을 시험해 보세요.

func isJSON(s string) bool {
  var js interface{}
  return json.Unmarshal([]byte(s), &js) == nil
}

아니면 윌리엄 킹의 해결책일 수도 있고, 더 나은 방법일 수도 있죠.

이런 걸 써보는 건 어떨까요?

if err := json.Unmarshal(input, temp_object); err != nil {
    fmt.Println("it's normal string!")
} else {
    fmt.Println("it's json!")
}

언급URL : https://stackoverflow.com/questions/22128282/how-to-check-string-is-in-json-format