mhunst
Goto Top

JSON zu BSON

Huhu,

ich hoffe das meine Frage hier halbwegs richtig ist.

Zur Aufgabe steht die Konfiguration eines "WebdynEasy W M-Bus 868MHz" mittels .bson Dateien.

Die entsprechende Konfiguration im .json Format habe ich soweit erstellt, aber wie bekomme ich jetzt aus einer .json eine .bson Datei?
Da muss es doch irgendwo ein entsprechendes Tool geben, jedoch finde ich einfach nichts ...

Eventuell hat ja von Euch jemand eine Idee.

LG Michael face-smile

Content-Key: 1987834861

Url: https://administrator.de/contentid/1987834861

Printed on: April 27, 2024 at 09:04 o'clock

Mitglied: 1915348599
1915348599 Feb 23, 2022 updated at 13:48:09 (UTC)
Goto Top
Member: mhunst
mhunst Feb 23, 2022 at 15:16:10 (UTC)
Goto Top
Vielen Dank face-smile

Diese Seiten habe ich auch gefunden, allerdings scheine ich zu blöd für die Anwendung ... jedefalls bekomme ich es nicht hin eine .bson zu generieren.
Mitglied: 1915348599
1915348599 Feb 23, 2022 updated at 15:22:17 (UTC)
Goto Top
Eine Datei auswählen bekommst du nicht hin ??? Dann ist Hopfen und Malz verloren 😉.
Member: mhunst
mhunst Feb 24, 2022 at 06:32:59 (UTC)
Goto Top
Schon selber probiert? Bei mir gibt es keinen Browser, der auch nur den Hauch einer Reaktion bei der Bedienung des Formulars zeigt face-wink
Mitglied: 1915348599
1915348599 Feb 24, 2022 updated at 06:49:31 (UTC)
Goto Top
Zitat von @mhunst:

Schon selber probiert? Bei mir gibt es keinen Browser, der auch nur den Hauch einer Reaktion bei der Bedienung des Formulars zeigt face-wink

Jup, geht hier problemlos. Aber oben findest du ja hunderte Datenschutz freundlichere Alternativen, verstehe ehrlich gesagt dein Problem nicht ... Bist du einfach nur zu faul oder was hindert dich daran diese zu nutzen?! Hinsetzen lesen, nötigen Background anlesen und machen...as simple as that.
Von selbst backen sich deine Brötchen auch nicht.
Member: mhunst
mhunst Feb 24, 2022 at 08:22:34 (UTC)
Goto Top
Ich kann mir ehrlich gesagt nicht vorstellen, dass das Script bei Dir funktioniert :D

Meine Hoffnung war, dass jemand ein leicht zu verwendendes Tool kennt.
Es war nie meine Absicht mich mehrere Stunden mit dieser Thematik zu beschäftigen, vermutlich sogar noch selber was zu scripten, wobei auch noch vorab entsprechende Voraussetzungen geschaffen werden müssen.
Und nein ... dafür bin ich nicht zu faul, dafür fehlt mir schlicht die Zeit.

Na ja, trotzdem vielen Dank.
Member: colinardo
Solution colinardo Feb 24, 2022 updated at 13:29:43 (UTC)
Goto Top
Servus Michael,
mit folgendem Powershell-Skript (zur Info das Skript lädt eine DLL von nuget.org für den Konvertierungsvorgang ins Skriptverzeichnis)
param(
    [parameter(mandatory=$true)]$json,
    [parameter(mandatory=$true)]$bson
)
function ConvertJsonTo-Bson {
    param(
        [string]$json
    )
    function Load-NugetAssembly {
        [CmdletBinding()]
        param(
            [string]$url,
            [string]$name,
            [string]$zipinternalpath,
            [switch]$downloadonly
        )
        # Accept all TLS protocols
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) 
        if($psscriptroot -ne ''){  
            $localpath = join-path $psscriptroot $name
        }else{
            $localpath = join-path $env:TEMP $name
        }
        $tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"  
        $zip = $null
        try{
            if(!(Test-Path $localpath)){
                Add-Type -A System.IO.Compression.FileSystem
                write-host "Downloading and extracting required library '$name' ... " -F Green -NoNewline  
                (New-Object System.Net.WebClient).DownloadFile($url, $tmp)
                $zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
                $zip.Entries | ?{$_.Fullname -eq $zipinternalpath} | %{
                    [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
                }
	            Unblock-File -Path $localpath
                write-host "OK" -F Green  
            }
            if(!$downloadonly.IsPresent){
                Add-Type -Path $localpath -EA Stop
            }
        
        }catch{
            throw "Error: $($_.Exception.Message)"  
        }finally{
            if ($zip){$zip.Dispose()}
            if(Test-Path $tmp){del $tmp -Force -EA 0}
        }  
    }
    Load-NugetAssembly 'https://www.nuget.org/api/v2/package/Newtonsoft.Json/13.0.1' -name 'Newtonsoft.Json.dll' -zipinternalpath 'lib/net45/Newtonsoft.Json.dll' -EA Stop  
        
    $reader = $null;$ms = $null;$bsonwriter = $null
    try{
        $reader = [Newtonsoft.Json.JsonTextReader]::new([System.IO.StringReader]::new($json))
        $data = [Newtonsoft.Json.JsonSerializer]::new().Deserialize($reader)
        $ms = [System.IO.MemoryStream]::new()
        $bsonwriter = [Newtonsoft.Json.Bson.BsonWriter]::new($ms)
        [Newtonsoft.Json.JsonSerializer]::new().Serialize($bsonwriter,$data)
        $ms.ToArray()
    }catch{
        write-host $_.Exception.Message -F Red
    }finally{
        if ($bsonwriter){$bsonwriter.Close();$bsonwriter.Dispose()}
        if ($ms){$ms.Close();$ms.Dispose()}
        if ($reader){$reader.Close();$reader.Dispose()}
    }
}
# convert to bson file
[io.File]::WriteAllBytes($bson,(ConvertJsonTo-Bson -json (gc $json -raw)))
so aus einer CMD heraus so ausgeführt (Quell- und Zielpfade anpassen)
powershell -ep bypass -file .\script.ps1 -json "D:\Quelle\test.json" -bson "D:\Ziel\test.bson"  
oder direkt in einer Powershell-Konsole so ausgeführt
.\script.ps1 -json "D:\Quelle\test.json" -bson "D:\Ziel\test.bson"  
bekommst du dein bson File aus einer json face-smile.


Habe dir auch noch eine kleine Konsolenanwendung (.NET 4.5) mit c# geschrieben, die macht es noch einfacher in der Anwendung:

json_to_bson_1987834861.zip

Benutzung fällt auf der Konsole dann so aus
json_to_bson.exe -json [JSON Source-Path] -bson [BSON Destination-Path]

Grüße Uwe
Member: mhunst
mhunst Feb 24, 2022 at 11:51:27 (UTC)
Goto Top
Hallo Uwe,

damit hätte ich ja nicht mehr gerechnet ... vielen Dank für Deine Mühe, das funktioniert perfekt!

LG Michael face-smile
Member: colinardo
colinardo Feb 24, 2022 at 12:41:10 (UTC)
Goto Top
Immer gerne 👍